reactjs - Firebase IdToken 过期后如何刷新?
问题描述
我使用 express 作为后端,并且使用 Firebase Admin SDK 将令牌发送回客户端。目前令牌在 1 小时后过期。我在firebase上读到没有任何方法可以更改过期属性,因为它的工作方式 - 用户每小时都会获得一个刷新的令牌。那是对的吗?如果是这样,我应该如何实现它?这是我的登录路线:
exports.login = async (req, res) => {
const user = {
email: req.body.email,
password: req.body.password,
}
// Validate Data
const { valid, errors } = validateLogin(user)
if (!valid) return res.status(400).json(errors)
try {
const data = await firebase
.auth()
.signInWithEmailAndPassword(user.email, user.password)
const token = await data.user.getIdToken()
const cookieOptions = {
httpOnly: true,
secure: false,
}
res.cookie('jwt', token, cookieOptions)
return res.status(201).json({ token })
} catch (err) {
errors.general = 'Wrong credentials, please try again'
return res.status(403).json(errors)
}
}
解决方案
后端不需要做任何事情来实现令牌刷新。客户端应用程序将使用 Firebase Auth SDK 自动执行此操作。
无论如何,后端应用程序不应该让用户登录 - 这不会按您期望的方式工作。使用 Firebase 身份验证时,客户端应用程序应该使用客户端 SDK 登录。客户端应用程序登录,获取令牌,然后将该令牌传递到后端以使用 Firebase Admin SDK进行验证,然后执行操作。
推荐阅读
- c# - 我的 c# 控制台应用程序不允许带有 Console.ReadLine() 的变量接收用户输入,而是从 1 向上计数
- python - Groupby 根据以前可用值和下一个可用值的平均值填充数据框中的缺失值
- gtk - 如何在 GTK Iconview 中垂直列出项目?
- javascript - localhost express mongodb server,fetch request到localhost返回400状态
- php - 根据下拉选择格式化用户文本
- python - Flask render_template 无法显示引用的模板
- selenium - 如何从机器人框架中的命令行参数获取测试用例传递中的变量
- javascript - 如何确定所选文本中是否有换行符
- flutter - 自定义 IBM Watson Visual Recognition 服务与 Flutter/Dart 的集成
- angular - 上传到 AngularFireStorage 后如何使用 getDownloadUrl() 检索下载 URL