【问题标题】:Use Firebase for Auth and MongoDB for DB使用 Firebase 进行身份验证,使用 MongoDB 进行数据库
【发布时间】:2021-04-28 19:19:52
【问题描述】:

我正在构建一个带有用户身份验证的 react 原生移动应用。我决定使用 Firebase 身份验证,因为它相对容易实现。

我想使用我自己的后端(node、express)和我自己的数据库(MongoDB),我需要保护我的 API 调用以检查用户是否经过身份验证以及他是否有权执行该操作。

但我对令牌验证并不放心,我不确定我是否以正确的方式进行......

这就是我试图从客户端(移动应用程序)发出简单的 GET 或 POST 请求的方式:

在客户端我检索当前用户令牌并将其发送到我的 GET 请求的标头中:

firebase.auth().currentUser.getIdToken(true).then(token => {
      fetch('http://localhost:3000', {
        method: 'GET',
        mode: 'cors',
        headers: {
          'AuthToken': token
        }
      }).then(res => res.json().then(res => console.log(res)))
        .catch(err => console.log(err))

感谢 firebase 管理员,我在服务器上使用中间件检查令牌

function checkAuth(req, res, next) {
  if (req.headers.authtoken) {
    admin.auth().verifyIdToken(req.headers.authtoken)
      .then((token) => {
        console.log(token)
        next()
      }).catch(() => {
        res.status(403).send('Unauthorized')
      });
  } else {
    res.status(403).send('Unauthorized')
  }
}

因此,对于来自登录用户的简单获取请求,我必须执行以下操作:

  1. 在客户端获取用户IdToken
  2. 发送到服务器
  3. 用 firebase 检查它
  4. 对我的数据库进行操作
  5. 将数据发送回客户端

我做对了吗?我不知道我是否应该将 IdToken 存储在手机内存中以避免每次都从 firebase 获取它(但令牌会在 1 小时后过期......)

似乎很多“从firebase检查”操作只是为了简单的获取......

你能给我一些建议,告诉我如何让这一切更有效率吗?

非常感谢!

【问题讨论】:

    标签: node.js mongodb express firebase-authentication


    【解决方案1】:

    总体而言,您的流程对我来说看起来不错,但我需要优化一些事情。


    通过将true 传递给getIdToken(true),您将强制它每次在执行您的fetch 之前刷新令牌。

    没有必要这样做,因为 Firebase 已经在后台自动刷新 ID 令牌。因此,您可以通过以下方式减少资源密集度,并且速度更快:

    firebase.auth().currentUser.getIdToken().then(token => {
      fetch('http://localhost:3000', {
        ...
    

    调用admin.auth().verifyIdToken(req.headers.authtoken) 后,您会得到一个结果,该结果还显示令牌的有效期。因此,您可以在某个地方缓存已验证的令牌,直到接近那个时间,如果您获得相同的输入,则使用该缓存版本。这样可以节省您调用 verifyIdToken` 的时间。

    【讨论】:

    • 非常感谢,你很有帮助!我会采纳你的建议。您能告诉我缓存已验证令牌的最佳做法是什么吗?
    猜你喜欢
    • 1970-01-01
    • 2020-10-09
    • 2021-05-26
    • 2017-09-12
    • 2021-07-20
    • 1970-01-01
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多