firebase - 如何访问自定义声明?
问题描述
我正在尝试根据此文档文章访问我为我的用户设置的自定义声明。
我在 Firebase Authentication Flutter 插件的类中找不到customClaims
成员。FirebaseUser
如何在 Flutter 中访问 Firebase 身份验证自定义声明?
注意:我有以下自定义声明:
"customClaims": {
"admin": true
}
解决方案
您可以使用 访问用户的声明FirebaseUser.getIdTokenResult
。
该方法IdTokenResult
返回的Future
返回值包含有关身份验证令牌的有用信息,例如身份验证时间、令牌的到期时间、登录提供程序等,但它还包含用户的声明,并且还包含您的自定义声明。
Future<Map<dynamic, dynamic>> get currentUserClaims async {
final user = FirebaseAuth.instance.currentUser;
// If refresh is set to true, a refresh of the id token is forced.
final idTokenResult = await user.getIdTokenResult(true);
return idTokenResult.claims;
}
如果您现在调用 getter ( await currentUserClaims
),它将返回Map<dynamic, dynamic>
包含所有用户声明的 a,而不仅仅是自定义声明。这看起来像这样(在这种情况下,用户使用了电话登录提供商):
{
phone_number: <phone number>,
firebase: {
identities: {
phone: [<phone number>]
},
sign_in_provider: phone
},
user_id: <user id>,
aud: <project id>,
exp: <expiration time in milliseconds since epoch>,
iat: <issued at time in milliseconds since epoch>,
iss: https://securetoken.google.com/<project id>,
sub: <user id>,
auth_time: <authentication time in milliseconds since epoch>,
admin: true, # This is your custom claim!
}
您可以在最后看到自定义声明。这意味着您可以像这样检查它:
final isAdmin = (await currentUserClaims)['admin'] == true;
推荐阅读
- webpack - webpack要求,如何传递一个字符串变量?
- php - 升级 Laravel 时会丢失更改吗
- sails.js - 如何使机器退出响应返回 JSON?
- r - 我想使用 for 循环在我的 R 数据框中添加多个列
- omnet++ - OMNET++:如何在我的自定义继承模块中替换 INET 4.0 子模块?
- java - 了解优先队列中的 SORT 方法
- docker - 挂载操作系统特定的卷
- reactjs - 可以在呈现页面之前更改特定链接/页面/路径的元数据/图像/标题吗?
- react-native - Expo 构建错误不是描述性的 - 构建 JavaScript 包失败
- javascript - 如何在 Javascript 的一个文本框中添加两个数字?