【发布时间】:2019-03-14 17:04:02
【问题描述】:
我正在使用 angularfire2 使用 Angular6 应用程序。我在用户创建中将角色设置为自定义声明,但它似乎没有传播。
当我创建用户时,我将用户 ID、业务 ID 和角色发送到云函数:
出价 > 业务 ID
角色>角色
req.body.uid > 用户标识
const customClaims = {
roles: { [bid]: urole }
}
admin.auth().setCustomUserClaims(req.body.uid, customClaims)
.then(result => {
res
.status(200)
.send()
})
问题是当对云函数的调用完成时,我想将用户重定向到需要用户设置自定义声明集的路由,但它失败了。经过一番调试,我发现如果运行:
this.angularFireAuth.auth.currentUser.getIdTokenResult(true).then(result => {
return result.claims.roles
})
调用云函数“result.claims.roles”后立即未定义,但如果我刷新页面,“result.claims.roles”有我之前设置的数据。
我已经尝试过 reload 方法和 getIdToken(true) 但我遇到了同样的问题。
有没有办法避免刷新页面并获得自定义声明?
谢谢!
【问题讨论】:
-
您能否在调用 HTTP 触发器端点的位置添加代码,然后获取结果?我只是想验证代码在调用
getIDTokenResult(true)之前是否等待结果。另外请务必将您的 SDK 更新到最新版本,因为 Cloud Firestore、Cloud Storage 和 RTDB 的规则过去仅在 uid 更改时更新,而不是在令牌更改时更新。 -
仁,这是我设置角色的电话:
return this.http.post(${this.environment.backendHostUrl}/api/user/role, { uid: userId, role: role, business: business }).pipe( catchError(error => of(console.log(error))) ).subscribe(response => { debugger <--- I get: response = "null" })
标签: javascript firebase firebase-authentication angularfire2