【问题标题】:com.google.firebase.auth.FirebaseAuthInvalidCredentialsException The custom token format is incorrect. Please check the documentation PHP-Laravelcom.google.firebase.auth.FirebaseAuthInvalidCredentialsException 自定义令牌格式不正确。请查看文档 PHP-Laravel
【发布时间】:2018-04-09 18:26:33
【问题描述】:

我在 Laravel 中使用“kreait/firebase-php”生成 Firebase 自定义令牌。我生成自定义令牌的代码如下:

public function getToken(){

    $user = Auth::user();

    $serviceAccount=ServiceAccount::fromJsonFile(__DIR__.'/service_account.json');

    $firebase = (new Factory)
                ->withServiceAccount($serviceAccount)
                ->create();

    $customToken=$firebase->getAuth()->createCustomToken("id");

    return response()->json(["custom_token"=>$customToken]);
}

我得到 JWT 令牌没有任何问题。但是,当我尝试在 android 中使用此令牌登录时,我得到令牌格式不正确的错误。我的 Android 代码如下:

firebaseAuth.signInWithCustomToken(customToken)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        // Sign in success, update UI with the signed-in user's information
                        Log.d("SignIn", "signInWithCustomToken:success");
                        FirebaseUser user = firebaseAuth.getCurrentUser();
                        Log.e("current User is",user.getUid());
                    } else {

                        Log.w("Sign iN failed", "signInWithCustomToken:failure", task.getException());
                        Toast.makeText(MainActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                       /// updateUI(null);
                    }
                }
            });

而 Logcat 的输出是:

com.google.firebase.auth.FirebaseAuthInvalidCredentialsException: The custom token format is incorrect. Please check the documentation.
                                                                    at com.google.android.gms.internal.zzdxm.zzao(Unknown Source)
                                                                    at com.google.android.gms.internal.zzdwn.zza(Unknown Source)
                                                                    at com.google.android.gms.internal.zzdxx.zzap(Unknown Source)
                                                                    at com.google.android.gms.internal.zzdya.onFailure(Unknown Source)
                                                                    at com.google.android.gms.internal.zzdxo.onTransact(Unknown Source)
                                                                    at android.os.Binder.execTransact(Binder.java:565)

请帮我解决这个错误。谢谢。

【问题讨论】:

标签: php android laravel firebase


【解决方案1】:

生成的自定义令牌是Lcobucci\JWT\Token 的一个实例——当你将它传递给response()-&gt;json(...) 时,json() 方法会尝试json_encode() 对象而不是使用它的字符串表示,这将不起作用。

因此,如果您想使用 SDK 方法之一返回的 JWT Token 的字符串表示,您需要将对象转换为字符串:

return response()->json(["custom_token" => (string) $customToken]);

【讨论】:

    猜你喜欢
    • 2019-12-21
    • 2018-01-06
    • 2018-10-16
    • 2017-02-08
    • 2016-12-04
    • 2017-02-16
    • 1970-01-01
    • 2016-05-04
    • 2018-12-05
    相关资源
    最近更新 更多