node.js - Firebase 管理员 SDK 角色
问题描述
我正在 NodeJS、Express API 中设置 Firebase Admin SDK。
我添加了一个端点,允许我创建一个用户 -
route.post('/create', (req, res) => {
const { email, password } = req.body
fbseAdmin.auth().createUser({ email, password })
.then((userRecord) => {
res.status(200).json({ userRecord })
})
})
但是,我想做的是确保用户具有角色,以便我可以对某些服务进行授权检查。
我不明白我怎么能做到这一点?我在想也许我在实时数据库中添加了一个条目,比如 -
users/uid/roles/<role name>: true
但是我不确定我是否遗漏了什么。另外,如果是这种情况并且我确实需要这样做,我会这样做 -
route.post('/create', (req, res) => {
const { email, password } = req.body
fbseAdmin.auth().createUser({ email, password })
.then((userRecord) => {
fbseAdmin.database()
.ref('users')
.child(`${userRecord.uid}/roles`)
.set({
admin: true
})
res.status(200).json({ userRecord })
})
})
至少可以说,这似乎有点脆弱。
此外,由于此条目不是用户对象的一部分,因此每次我想验证时都需要在实时数据库中查找?那是对的吗?
解决方案
您应该了解如何针对用户设置自定义声明。
route.post('/create', (req, res) => {
const { email, password } = req.body
fbseAdmin.auth().createUser({ email, password })
.then((userRecord) => {
fbseAdmin.auth().setCustomUserClaims(userRecord.uid, { admin: true })
.then(() => {
res.status(200).json({ userRecord })
})
})
})
推荐阅读
- c# - EF Core 2.2调用存储过程返回0个结果
- typescript - 我如何了解未提及的打字稿规则?
- git - 如何忽略 git clone?
- php - 保护 PHP 被其他站点访问
- observable - RxSwift - 致命错误:抽象方法错误
- python - 如何将条件列表传递给检查所有可能的条件组合的方法?
- xml - 解析 web-fragment.xml 失败 - 无法读取架构文档“https://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd”
- scala - 使用两个变量列表添加 scala 列
- reactjs - 在 onDragStart 中调用 setState 会导致 DOM 节点被删除?
- ios - 为什么 iOS 密码自动填充不提示在钥匙串上保存密码?