Как получить доступ к настраиваемым претензиям? - PullRequest
0 голосов
/ 14 октября 2019

Я пытаюсь получить доступ к пользовательским утверждениям, которые я установил для своих пользователей в соответствии с этой статьей документации .

Я не могу найти члена customClaims в классе FirebaseUserподключаемого модуля Firebase Authentication Flutter .

Как получить доступ к настраиваемым заявкам Firebase Authentication во Flutter?

Примечание : у меня есть следующие настраиваемые утверждения:

"customClaims": {
  "admin": true
}

1 Ответ

1 голос
/ 14 октября 2019

Вы можете получить доступ к претензиям пользователя , используя FirebaseUser.getIdToken.
IdTokenResult, возвращаемое из Future, который возвращаетсяметод содержит полезную информацию о токене аутентификации, такую ​​как время аутентификации, время истечения токена, провайдер входа и т. д., но он также содержит претензии пользователя и вместе с этим также ваши настраиваемые утверждения .

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...