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

时间:2016-05-29 00:50:41

标签: android firebase-authentication google-authentication facebook-authentication

我使用<div class="wrapper"> <div class="clip-text clip-text_background"> EARLY BIRD DISCOUNT </div> </div>com.google.gms:google-services:3.0.0遇到Android Firebase Auth的问题。

使用Firebase(Google或Facebook)进行身份验证后1小时,我收到以下错误:

com.google.firebase:firebase-auth:9.0.1

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

更新

我仍然遇到此问题,Firebase令牌在1小时后过期。现在我收到以下消息: W/PersistentConnection: pc_0 - Authentication failed: expired_token (Auth token is expired)

我感谢任何帮助。

4 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

尝试实施FirebaseInstanceIdService以获取刷新令牌。

访问注册令牌

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

    @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。

<强>代码:

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.
    }
}

我希望它会帮助你。

答案 2 :(得分:0)

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

至于无效的声明&#39; kid&#39;在auth标题。,我在Google上获得了2个搜索结果(:Firebase文档中没有与 kid 相关的文档。我想我们将不得不等待来自Google的答案(或如果可能,请切换回旧版本的Firebase。

答案 3 :(得分:0)

检查最后一个用户是否为空或已过期

let array = [
  [1, 1, 1, 1],
  [1, 0, 0, 1],
  [1, 0, 0, 1],
  [1, 1, 1, 1]
];

function addPadding(arr, fill) {
  arr = arr.map(a => fill + a.join("") + fill);
  const pad = fill.repeat(arr[0].length);
  arr.unshift(pad);
  arr.push(pad);
  arr = arr.map(a => a.split("").map(n => +n));
  return arr;
}

console.table(addPadding(array, "0"));