从 facebook LoginButton 的 registerCallback 方法获取错误的访问令牌
Getting wrong access token from registerCallback method of facebook LoginButton
我可以通过调用这个 signIn() 方法成功登录到 facebook。
private fun signIn() {
loginBtn?.registerCallback(callBackManager,object: FacebookCallback<LoginResult>{
override fun onSuccess(result: LoginResult?) {
handleFacebookAccessToken(result!!.accessToken)
}
override fun onCancel() {
}
override fun onError(error: FacebookException?) {
Log.d("MainActivity:", "onError "+error?.message)
}
})
}
private fun handleFacebookAccessToken(accessToken: AccessToken?) {
val authCredential = FacebookAuthProvider.getCredential(accessToken!!.token)
firebaseAuth?.signInWithCredential(authCredential)
?.addOnCompleteListener(this) { task ->
if (task.isSuccessful) {
// Sign in success, update UI with the signed-in user's information
Log.d("MainActivity:", "signInWithCredential:success")
} else {
// If sign in fails, display a message to the user.
Log.w("dsds", "signInWithCredential:failure ", task.exception)
Toast.makeText(baseContext, "Authentication failed.",
Toast.LENGTH_SHORT).show()
}
}
}
但我无法通过调用 handleFacebookAccessToken(accessToken: AccessToken?) 方法使用 firebase 进行身份验证以登录 firebase,因为它提供了无效的访问令牌。
如果我通过转到 Facebook 开发人员控制台中的应用程序手动从测试用户那里获取访问令牌,并且
在下面的 handleFacebookAccessToken(token: String?) 方法中对其进行硬编码,然后它就可以工作了。
private fun handleFacebookAccessToken(token: String?) {
val authCredential = FacebookAuthProvider.getCredential(token)
firebaseAuth?.signInWithCredential(authCredential)
?.addOnCompleteListener(this) { task ->
if (task.isSuccessful) {
// Sign in success, update UI with the signed-in user's information
Log.d("MainActivity:", "signInWithCredential:success")
} else {
// If sign in fails, display a message to the user.
Log.w("dsds", "signInWithCredential:failure ", task.exception)
Toast.makeText(baseContext, "Authentication failed.",
Toast.LENGTH_SHORT).show()
}
}
}
我在下面收到此异常。
com.google.firebase.auth.FirebaseAuthInvalidCredentialsException: The supplied auth credential is malformed or has expired. [ Remote site 5XX from facebook.com for VERIFY_CREDENTIAL ]
at com.google.android.gms.internal.firebase-auth-api.zztt.zza(com.google.firebase:firebase-auth@@20.0.4:28)
at com.google.android.gms.internal.firebase-auth-api.zzvb.zza(com.google.firebase:firebase-auth@@20.0.4:9)
at com.google.android.gms.internal.firebase-auth-api.zzvc.zzk(com.google.firebase:firebase-auth@@20.0.4:1)
at com.google.android.gms.internal.firebase-auth-api.zzuz.zzh(com.google.firebase:firebase-auth@@20.0.4:25)
at com.google.android.gms.internal.firebase-auth-api.zztq.zzk(com.google.firebase:firebase-auth@@20.0.4:1)
at com.google.android.gms.internal.firebase-auth-api.zzpr.zza(com.google.firebase:firebase-auth@@20.0.4:2)
at com.google.android.gms.internal.firebase-auth-api.zzvg.zza(com.google.firebase:firebase-auth@@20.0.4:25)
at com.google.android.gms.internal.firebase-auth-api.zzuq.zzd(com.google.firebase:firebase-auth@@20.0.4:4)
at com.google.android.gms.internal.firebase-auth-api.zzpy.zzc(com.google.firebase:firebase-auth@@20.0.4:4)
at com.google.android.gms.internal.firebase-auth-api.zztu.zzd(com.google.firebase:firebase-auth@@20.0.4:5)
at com.google.android.gms.internal.firebase-auth-api.zzsg.zzd(com.google.firebase:firebase-auth@@20.0.4:3)
at com.google.android.gms.internal.firebase-auth-api.zzsf.accept(Unknown Source:6)
at com.google.android.gms.common.api.internal.zacj.doExecute(com.google.android.gms:play-services-base@@17.1.0:2)
at com.google.android.gms.common.api.internal.zaf.zac(com.google.android.gms:play-services-base@@17.1.0:6)
at com.google.android.gms.common.api.internal.GoogleApiManager$zaa.zac(com.google.android.gms:play-services-base@@17.1.0:167)
at com.google.android.gms.common.api.internal.GoogleApiManager$zaa.zab(com.google.android.gms:play-services-base@@17.1.0:139)
at com.google.android.gms.common.api.internal.GoogleApiManager$zaa.zaa(com.google.android.gms:play-services-base@@17.1.0:105)
at com.google.android.gms.common.api.internal.GoogleApiManager.handleMessage(com.google.android.gms:play-services-base@@17.1.0:145)
at android.os.Handler.dispatchMessage(Handler.java:103)
at com.google.android.gms.internal.base.zar.dispatchMessage(com.google.android.gms:play-services-base@@17.1.0:8)
at android.os.Looper.loop(Looper.java:224)
at android.os.HandlerThread.run(HandlerThread.java:67)
登录https://developers.facebook.com/apps/
Select 应用并确认应用类型是消费者
解决方案参考自https://github.com/FirebaseExtended/flutterfire/issues/4524#issuecomment-764610739
我可以通过调用这个 signIn() 方法成功登录到 facebook。
private fun signIn() {
loginBtn?.registerCallback(callBackManager,object: FacebookCallback<LoginResult>{
override fun onSuccess(result: LoginResult?) {
handleFacebookAccessToken(result!!.accessToken)
}
override fun onCancel() {
}
override fun onError(error: FacebookException?) {
Log.d("MainActivity:", "onError "+error?.message)
}
})
}
private fun handleFacebookAccessToken(accessToken: AccessToken?) {
val authCredential = FacebookAuthProvider.getCredential(accessToken!!.token)
firebaseAuth?.signInWithCredential(authCredential)
?.addOnCompleteListener(this) { task ->
if (task.isSuccessful) {
// Sign in success, update UI with the signed-in user's information
Log.d("MainActivity:", "signInWithCredential:success")
} else {
// If sign in fails, display a message to the user.
Log.w("dsds", "signInWithCredential:failure ", task.exception)
Toast.makeText(baseContext, "Authentication failed.",
Toast.LENGTH_SHORT).show()
}
}
}
但我无法通过调用 handleFacebookAccessToken(accessToken: AccessToken?) 方法使用 firebase 进行身份验证以登录 firebase,因为它提供了无效的访问令牌。 如果我通过转到 Facebook 开发人员控制台中的应用程序手动从测试用户那里获取访问令牌,并且 在下面的 handleFacebookAccessToken(token: String?) 方法中对其进行硬编码,然后它就可以工作了。
private fun handleFacebookAccessToken(token: String?) {
val authCredential = FacebookAuthProvider.getCredential(token)
firebaseAuth?.signInWithCredential(authCredential)
?.addOnCompleteListener(this) { task ->
if (task.isSuccessful) {
// Sign in success, update UI with the signed-in user's information
Log.d("MainActivity:", "signInWithCredential:success")
} else {
// If sign in fails, display a message to the user.
Log.w("dsds", "signInWithCredential:failure ", task.exception)
Toast.makeText(baseContext, "Authentication failed.",
Toast.LENGTH_SHORT).show()
}
}
}
我在下面收到此异常。
com.google.firebase.auth.FirebaseAuthInvalidCredentialsException: The supplied auth credential is malformed or has expired. [ Remote site 5XX from facebook.com for VERIFY_CREDENTIAL ]
at com.google.android.gms.internal.firebase-auth-api.zztt.zza(com.google.firebase:firebase-auth@@20.0.4:28)
at com.google.android.gms.internal.firebase-auth-api.zzvb.zza(com.google.firebase:firebase-auth@@20.0.4:9)
at com.google.android.gms.internal.firebase-auth-api.zzvc.zzk(com.google.firebase:firebase-auth@@20.0.4:1)
at com.google.android.gms.internal.firebase-auth-api.zzuz.zzh(com.google.firebase:firebase-auth@@20.0.4:25)
at com.google.android.gms.internal.firebase-auth-api.zztq.zzk(com.google.firebase:firebase-auth@@20.0.4:1)
at com.google.android.gms.internal.firebase-auth-api.zzpr.zza(com.google.firebase:firebase-auth@@20.0.4:2)
at com.google.android.gms.internal.firebase-auth-api.zzvg.zza(com.google.firebase:firebase-auth@@20.0.4:25)
at com.google.android.gms.internal.firebase-auth-api.zzuq.zzd(com.google.firebase:firebase-auth@@20.0.4:4)
at com.google.android.gms.internal.firebase-auth-api.zzpy.zzc(com.google.firebase:firebase-auth@@20.0.4:4)
at com.google.android.gms.internal.firebase-auth-api.zztu.zzd(com.google.firebase:firebase-auth@@20.0.4:5)
at com.google.android.gms.internal.firebase-auth-api.zzsg.zzd(com.google.firebase:firebase-auth@@20.0.4:3)
at com.google.android.gms.internal.firebase-auth-api.zzsf.accept(Unknown Source:6)
at com.google.android.gms.common.api.internal.zacj.doExecute(com.google.android.gms:play-services-base@@17.1.0:2)
at com.google.android.gms.common.api.internal.zaf.zac(com.google.android.gms:play-services-base@@17.1.0:6)
at com.google.android.gms.common.api.internal.GoogleApiManager$zaa.zac(com.google.android.gms:play-services-base@@17.1.0:167)
at com.google.android.gms.common.api.internal.GoogleApiManager$zaa.zab(com.google.android.gms:play-services-base@@17.1.0:139)
at com.google.android.gms.common.api.internal.GoogleApiManager$zaa.zaa(com.google.android.gms:play-services-base@@17.1.0:105)
at com.google.android.gms.common.api.internal.GoogleApiManager.handleMessage(com.google.android.gms:play-services-base@@17.1.0:145)
at android.os.Handler.dispatchMessage(Handler.java:103)
at com.google.android.gms.internal.base.zar.dispatchMessage(com.google.android.gms:play-services-base@@17.1.0:8)
at android.os.Looper.loop(Looper.java:224)
at android.os.HandlerThread.run(HandlerThread.java:67)
登录https://developers.facebook.com/apps/
Select 应用并确认应用类型是消费者
解决方案参考自https://github.com/FirebaseExtended/flutterfire/issues/4524#issuecomment-764610739