首页 文章

Firebase Android身份验证失败:expired_token(身份验证令牌已过期)

提问于
浏览
13

我使用 com.google.gms:google-services:3.0.0com.google.firebase:firebase-auth:9.0.1 遇到Android Firebase Auth的问题 .

使用Firebase(Google或Facebook)验证后1小时,我收到以下错误消息:

W/PersistentConnection: pc_0 - Authentication failed: expired_token (Auth token is expired)

为什么Firebase令牌在1小时后过期以及如何延长此有效期?

UPDATE

我仍然遇到此问题,Firebase令牌在1小时后过期 . 现在我收到以下消息: W/PersistentConnection: pc_0 - Authentication failed: invalid_token (Invalid claim 'kid' in auth header.)

我感谢任何帮助 .

3 回答

  • 0

    如果我们使用默认的Auth提供程序(Google,Facebook,Email ..),在firebase控制台中更新应用程序的“SHA-1密钥”将修复令牌到期问题 .

    在此discussion中,Google开发人员共享了解决此问题的指南 .

    指南:https://drive.google.com/file/d/0B94LePkXiqa6SXVFd3N1NzJHX1E/view

  • 0

    尝试实现FirebaseInstanceIdService以获取刷新令牌 .

    Access the registration token

    您可以通过扩展FirebaseInstanceIdService来访问令牌的值 . 确保已将服务添加到manifest,然后在 onTokenRefresh 的上下文中调用 getToken ,并记录如下所示的值:

    @Override
    public void onTokenRefresh() {
        // Get updated InstanceID token.
        String refreshedToken = FirebaseInstanceId.getInstance().getToken();
        Log.d(TAG, "Refreshed token: " + refreshedToken);
    
        // TODO: Implement this method to send any registration to your app's servers.
        sendRegistrationToServer(refreshedToken);
    }
    

    只要生成新令牌,onTokenRefreshcallback就会触发,因此在其上下文中调用getToken可确保您访问当前可用的注册令牌 . 如果尚未生成令牌,FirebaseInstanceID.getToken()将返回null .

    Code:

    import android.util.Log;
    
    import com.google.firebase.iid.FirebaseInstanceId;
    import com.google.firebase.iid.FirebaseInstanceIdService;
    
    
    public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
    
        private static final String TAG = "MyFirebaseIIDService";
    
        /**
         * Called if InstanceID token is updated. This may occur if the security of
         * the previous token had been compromised. Note that this is called when the InstanceID token
         * is initially generated so this is where you would retrieve the token.
         */
        // [START refresh_token]
        @Override
        public void onTokenRefresh() {
            // Get updated InstanceID token.
            String refreshedToken = FirebaseInstanceId.getInstance().getToken();
            Log.d(TAG, "Refreshed token: " + refreshedToken);
    
            // TODO: Implement this method to send any registration to your app's servers.
            sendRegistrationToServer(refreshedToken);
        }
        // [END refresh_token]
    
        /**
         * Persist token to third-party servers.
         *
         * Modify this method to associate the user's FCM InstanceID token with any server-side account
         * maintained by your application.
         *
         * @param token The new token.
         */
        private void sendRegistrationToServer(String token) {
            // Add custom implementation, as needed.
        }
    }
    

    我希望它可以帮助你 .

  • 3

    Firebase令牌的新的最长续航时间为1小时 - 我今天早些时候在文档中阅读了它 .

    至于auth Headers 中的无效声明'kid',我在Google上获得了2个搜索结果(:没有与Firebase文档中的kid相关的文档 . 我想我们将不得不等待Google的答案(或切换回旧版本)如果可能的Firebase) .

相关问题