如何获取通过谷歌登录的用户的firebase UID



我正在尝试获取通过谷歌登录的用户的UID。

当我使用FirebaseAuth.getInstance().getCurrentUser().getUid()时,它显然显示了错误。

当我使用GoogleSignIn.getLastSignedInAccount(getContext()).getId时,它显示不正确的ID。

我怎么能得到他的UID?

有一个代码,我曾经通过谷歌登录。我是从https://firebase.google.com/docs/auth/android/google-signin

signInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken("R.string.default_client_id")
.requestEmail()
.build();
signInClient = GoogleSignIn.getClient(this, signInOptions);
signIn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent sign = signInClient.getSignInIntent();
startActivityForResult(sign, GOOGLE_SIGN_IN_CODE);
}
});
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == GOOGLE_SIGN_IN_CODE){
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
try {
// Google Sign In was successful, authenticate with Firebase
GoogleSignInAccount account = task.getResult(ApiException.class);
System.out.println("firebaseAuthWithGoogle:" + account.getId());
firebaseAuthWithGoogle( account.getIdToken());
} catch (ApiException e) {
// Google Sign In failed, update UI appropriately
}
}
}
private void firebaseAuthWithGoogle(String idToken) {
AuthCredential credential = GoogleAuthProvider.getCredential(idToken, null);
mAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
FirebaseUser user = mAuth.getCurrentUser();
startActivity(new Intent(MainActivity.this,NavActivity.class));
updateUI(user);
} else {
updateUI(null);
}
}
});
}

这就是我获取UID 的方式

String uid = "";
if(firebaseUser!=null ){
uid = firebaseUser.getUid();
}

您需要使用google登录令牌登录Firebase。

FirebaseAuth.getInstance().signInWithCredential(GoogleAuthProvider.getCredential(googleSignInAccount.getIdToken(), null))

因为您的FirebaseUser和Google帐户使用两种不同的授权,因此不能互换使用。

如果没有用户登录,.getCurrentUser()方法将返回null。确保你的应用程序中有这样的逻辑来防止崩溃:

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
// User is signed in
Log.d("TAG", user.getUid())
} else {
// No user is signed in
}

无论使用哪种身份验证方法,获取UID的方法都保持不变。只要用户登录,就会有一个UID。

使用Flutter,在使用谷歌进行登录操作后。

String? uid = FirebaseAuth.instance.currentUser?.uid;

正如Frank van Puffelen在评论中所提到的,NPE之所以提出,是因为没有用户登录。为了能够使用来自身份验证过程的UID,您应该始终检查无效性。在Kotlin,它将简单地是:

FirebaseAuth.getInstance().currentUser?.apply {
Log.d("TAG", it)
}

最新更新