我正在使用 angularfire2 开发 Angular6 应用程序。我将角色设置为用户创建中的自定义声明,但它似乎没有传播。
当我创建用户时,我将用户 ID、业务 ID 和角色发送到云功能:
出价>业务ID
尿素 > 作用
req.body.uid > 用户 ID
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”将具有我之前设置的数据。
我已经尝试过重新加载方法和 getIdToken(true) 但我遇到了同样的问题。
有没有办法避免刷新页面并获取自定义声明?
谢谢你!
用户登录后,他们会获得一个 ID 令牌,有效期约为一小时。如果您设置自定义声明,他们的(服务器端)配置文件会立即更新,但他们的 ID 令牌不会自动更新。因此,您需要刷新他们的 ID 令牌才能获取新的自定义声明。
据我所知,这个 ID 令牌只能通过调用来刷新getIdTokenResult
如果已经过期。如果这是原因,请致电user.reload() https://firebase.google.com/docs/reference/js/firebase.User#reload and then获取 ID 令牌应该会为您提供更新的声明。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)