如果我有一个包含某些声明的自定义令牌并且我使用它登录Firebase,是否有办法使用Web SDK从应用内部访问这些声明?
例如,如果我的自定义令牌是这样的
{
:iss => $service_account_email,
:sub => $service_account_email,
:aud => "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit",
:iat => now_seconds,
:exp => now_seconds+(60*60), # Maximum expiration time is one hour
:uid => uid,
:claims => {:premium_account => is_premium_account}
}
我想知道是否有类似的内容(来自应用内部):
firebase.auth.token.claims.premium_account
我在文档中找不到这样的内容。
答案 0 :(得分:3)
您似乎想getIdTokenResult
:
await firebase.auth().currentUser.getIdTokenResult()
答案 1 :(得分:0)
claims
嵌入在令牌中。
以下是使用网络客户端上的jwt-decode
从令牌中提取声明的示例代码:
import jwt_decode from './jwt-decode';
firebase.auth().currentUser.getToken().then((token) => {
console.log(token);
console.log(jwt_decode(token));
});
答案 2 :(得分:0)
以下是相关文档:https://firebase.google.com/docs/auth/admin/custom-claims
我认为它的要点是,一旦你通过后端代码(admin sdk或firebase函数)附加到用户的自定义声明,你可以base64解码currentUser标记。 该文档引用了关于javascript base64解码的mozilla文章:https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding
您可以JSON.parse已解码的令牌,您的自定义声明将显示在那里。文档非常好。