基于Firebase的Android Apple登录:获取含sub的JWT方法
获取Firebase登录后的JWT(含sub字段)
在Android平台通过startActivityForSignInWithProvider完成登录拿到AuthResult后,可按以下步骤获取包含sub字段的JWT:
从AuthResult获取FirebaseUser实例
登录成功后,AuthResult对象包含当前登录的用户实例,直接通过authResult.getUser()获取即可。调用getIdToken()获取JWT令牌
调用FirebaseUser.getIdToken()方法,该方法返回Task<GetTokenResult>对象,通过监听任务完成事件获取最终的JWT字符串:
Kotlin示例
authResult.user?.getIdToken(true) // true表示强制刷新令牌,按需设置 ?.addOnCompleteListener { task -> if (task.isSuccessful) { val jwtToken = task.result?.idToken // jwtToken就是包含sub字段的JWT字符串 // 若仅需唯一标识,直接使用authResult.user.uid即可(与sub字段值一致) } else { // 处理令牌获取失败逻辑 val exception = task.exception // 异常处理 } }
Java示例
FirebaseUser user = authResult.getUser(); if (user != null) { user.getIdToken(true) .addOnCompleteListener(task -> { if (task.isSuccessful()) { String jwtToken = task.getResult().getIdToken(); // jwtToken即为包含sub字段的JWT // sub字段值等价于user.getUid() } else { // 处理错误 Exception exception = task.getException(); // 异常处理 } }); }
- 关于sub字段的说明
- JWT的payload部分包含
sub字段,其值与FirebaseUser.getUid()返回的用户唯一ID完全一致,是跨平台通用的用户标识符,不受邮箱是否隐藏的影响。 getIdToken()方法中的true参数用于强制从Firebase服务器刷新令牌,若不需要强制刷新,可传入false或省略(默认值为false)。
内容的提问来源于stack exchange,提问作者czane
相关产品推荐
相关产品推荐

