gpt4 book ai didi

node.js - 使用 Firebase 进行身份验证,使用 MongoDB 进行数据库

转载 作者:行者123 更新时间:2023-12-04 03:41:58 24 4
gpt4 key购买 nike

我正在构建一个带有用户身份验证的 native 移动应用程序。我决定使用 Firebase 身份验证,因为它相对容易实现。
我想使用我自己的后端( Node 、 express )和我自己的数据库(MongoDB),我需要保护我的 API 调用以检查用户是否已通过身份验证以及他是否有权执行操作。
但是我对 token 验证并不放心,我不确定我是否以正确的方式做这件事......
这就是我试图从客户端(移动应用程序)发出简单的 GET 或 POST 请求的方法:
在客户端上,我检索当前用户 token 并将其发送到我的 GET 请求的 header 中:

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 admin,我在服务器上使用中间件来检查 token
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')
}
}
因此,对于来自登录用户的简单获取请求,我必须执行以下操作:
  • 在客户端获取用户IdToken
  • 发送到服务器
  • 使用 firebase 进行检查
  • 对我的数据库进行操作
  • 将数据发送回客户端

  • 我这样做对吗?我不知道我是否应该将 IdToken 存储在手机内存中以避免每次都从 firebase 获取它(但 token 会在 1 小时后过期......)
    似乎很多“从firebase检查”操作只是为了简单的获取......
    你能给我一些关于如何使所有这些更有效率的建议吗?
    非常感谢 !

    最佳答案

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

    通过将 true 传递给 getIdToken(true) ,您每次都在执行 fetch 之前强制它刷新 token 。
    没有必要这样做,因为 Firebase 已经在后台自动刷新 ID token 。因此,您可以通过以下方式减少资源密集度,并且速度更快:

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

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

    关于node.js - 使用 Firebase 进行身份验证,使用 MongoDB 进行数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65877095/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com