【发布时间】: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')
}
}
因此,对于来自登录用户的简单获取请求,我必须执行以下操作:
- 在客户端获取用户IdToken
- 发送到服务器
- 用 firebase 检查它
- 对我的数据库进行操作
- 将数据发送回客户端
我做对了吗?我不知道我是否应该将 IdToken 存储在手机内存中以避免每次都从 firebase 获取它(但令牌会在 1 小时后过期......)
似乎很多“从firebase检查”操作只是为了简单的获取......
你能给我一些建议,告诉我如何让这一切更有效率吗?
非常感谢!
【问题讨论】:
标签: node.js mongodb express firebase-authentication