node.js - 如何正确地在前端和 node.js 后端之间发送 firebase auth tokenId
问题描述
我正在创建一个聊天应用程序。我想找到一种使用 firebase auth 中的 TokenId 安全连接前端和后端的好方法。
- 我是否必须在从前端到后端的每个请求中发送一个 TokenId?
- 可以在会话中执行此操作或类似的操作,我可以发送一次令牌并验证一次吗?
我发送令牌的代码前端:
fetch('http://localhost:5500/check', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ token: token }),
})
.then(data => data.json())
.then(e => console.log(e))
.catch(err => console.log(err));
});
我像这样在前端获得令牌:
firebase.auth().currentUser.getIdToken(true)
我的代码后端验证令牌:
router.post('/check', urlencodedParser, (req, res) => {
const {token} = req.body;
admin
.auth()
.verifyIdToken(token)
.then(function (decodedToken) {
// let uid = decodedToken.uid;
res.setHeader('Content-Type', 'application/json');
res.send({status: 'Ok'});
})
.catch(function (error) {
console.log(error);
res.setHeader('Content-Type', 'application/json');
res.send({status: 'err'});
});
});
解决方案
- 我是否必须在从前端到后端的每个请求中发送一个 TokenId?
这就是 Firebase 客户端和后端服务所做的事情:它们随每个请求发送(并重新验证)ID 令牌。服务器缓存是解码令牌所需的公钥,但除此之外,关于用户/ID 令牌几乎是无状态的。
- 可以在会话中执行此操作或类似的操作,我可以发送一次令牌并验证一次吗?
您绝对可以将令牌保留在会话中,但这意味着您需要发送会话 ID 而不是令牌本身,并且必须为会话实施状态管理。
推荐阅读
- python - 有没有办法控制pygame中函数的迭代?
- navigation - SwiftUI - 按钮正确加载视图但随后在视图之间反弹
- azure - 从 Docker 容器在 Azure App Service Linux 主机上持久保存 Strapi SQLite 数据库
- python - 如何将月转换为年和月?
- qt - ListView + Delegate(嵌套项)的属性绑定无法按预期工作
- javascript - PHP $_POST 使用 FormData 通过 AJAX 上传时包含原始边界数据而不是表单字段数组
- python - 优先级队列作为最小堆 c++ 与 python 中的 heapq(如何将 heapq.heappop(openList) 转换为 c++?)
- javascript - 将 JSON 树导航到来自 Reddit API 的数据
- javascript - 模块解析失败:意外令牌 (4:16)
- html - 100%删除宽度后,为什么我的背景图片消失了?