Firebase Auth:使用CreateCustomToken设置自定义索赔
详细信息
如果您使用函数 createCustomToken
登录用户并设置其自定义声明,则稍后使用函数 setCustomUserClaims
更新自定义声明即使在强制执行后也不会更新声明。 idToken 使用函数 firebase.auth().currentUser.getIdTokenResult(true)
刷新
如何重现?
使用 createCustomToken
函数生成的自定义令牌(包括自定义声明)在 Firebase 上登录用户
firebase.auth().createCustomToken(uid, {myClaim: "test"}).then((customToken) => console.log(customToken))
使用自定义令牌在前端登录用户
// copy paste the customToken manually for testing
firebase.auth().signInWithCustomToken(customToken)
使用 setCustomUserClaims
在后端更新声明code>
firebase.auth().setCustomUserClaims(uid, {myClaim: "updateTest"})
刷新前端的 idToken 并记录自定义声明
firebase.auth().currentUser
.getIdTokenResult(/*force refresh*/ true)
.then((idTokenResult) => {
console.log(`custom claims`, idTokenResult.claims)
})
您应该看到声明仍然是 { myClaim: "test" }
而不是 { myClaim: "updateTest" }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
编辑:这实际上是一种预期的行为。使用
createCustomToken
设置的索赔具有更高的优先级。该文档在此处提到单独设置自定义索赔,而不是使用函数
createcustomToken
设置函数createCustomToken
设置它们将允许您以后编辑这些声明。工作代码:
Edit: This is actually an intended behavior. The claims set with
createCustomToken
have a higher priority. The doc mentions it here https://firebase.google.com/docs/auth/admin/custom-claims#set_and_validate_custom_user_claims_via_the_admin_sdkSetting the custom claims separately at sign in instead of using the function
createCustomToken
to set them will allow you to edit these claims later.Working code: