如果我有一个带有某些声明的自定义令牌,并且我使用它登录 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
我在文档中没有找到类似的内容。
claims
嵌入在代币中。
jwt-decode
从令牌中提取声明的示例代码:
import jwt_decode from './jwt-decode';
firebase.auth().currentUser.getToken().then((token) => {
console.log(token);
console.log(jwt_decode(token));
});
这是相关文档:https://firebase.google.com/docs/auth/admin/custom-claims
我认为其要点是,一旦您通过后端代码(admin sdk 或 firebase 函数)将自定义声明附加到用户,您就可以对 currentUser 令牌进行 base64 解码。 该文档引用了一篇关于 javascript base64 解码的 Mozilla 文章:https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding
您可以 JSON.parse 解码后的令牌,您的自定义声明将显示在那里。文档对此非常好。