我正在尝试访问根据this documentation article为用户设置的自定义声明。
我在FirebaseUser
class of the Firebase Authentication Flutter plugin中找不到一个customClaims
成员。
如何在Flutter中访问Firebase身份验证自定义声明?
注意:我有以下自定义声明:
"customClaims": {
"admin": true
}
答案 0 :(得分:1)
您可以使用FirebaseUser.getIdToken
访问用户的声明。
从方法返回的Future
返回的IdTokenResult
包含有关身份验证令牌的有用信息,例如身份验证时间,令牌的到期时间,登录提供程序等,但是它还包含用户的声明,以及您的自定义声明。
Future<Map<dynamic, dynamic>> get currentUserClaims async {
final user = await FirebaseAuth.instance.currentUser();
// If refresh is set to true, a refresh of the id token is forced.
final idToken = await user.getIdToken(refresh: true);
return idToken.claims;
}
如果现在调用吸气剂(await currentUserClaims
),它将返回一个Map<dynamic, dynamic>
,其中包含用户的所有声明,而不仅仅是自定义声明。看起来像这样(在这种情况下,用户使用了电话登录提供程序):
{
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;