我正在尝试将用户数据保存到Firebase实时数据库中,并且使用了Google登录身份验证。因此,在创建用户节点树时,我想存储“ Users>” uid“> userdata之类的数据。如何获得已验证用户的Uid?通过acct.getId()[acct是GoogleSignInAccount对象]或user.getUid()[用户是FirebaseUser对象]吗? 代码从这里开始:
private void firebaseAuthWithGoogle (final GoogleSignInAccount acct) {
Log.d("TAG", "firebaseAuthWithGoogle:" + acct.getId());
final DatabaseReference rootRef;
rootRef = FirebaseDatabase.getInstance().getReference();
AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
mAuth.signInWithCredential(credential)
.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("TAG", "signInWithCredential:success");
FirebaseUser user = mAuth.getCurrentUser();
if (acct != null) {
personName = acct.getDisplayName();
uid=user.getUid();
uid1=acct.getId();
HashMap<String,Object> userdatamap = new HashMap<>();
userdatamap.put("firstName",personName);
userdatamap.put("email",acct.getEmail());
rootRef.child("Users").child(/* uid */).updateChildren(userdatamap)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
Toast.makeText(login.this,"DONE",Toast.LENGTH_SHORT).show();
}
}
});
pref = getApplicationContext().getSharedPreferences("userinfo",0);
editor = pref.edit();
editor.putString("namekey",personName);
editor.commit();
Toast.makeText(login.this,"Welcome "+personName,Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(login.this,"Profile Name Not Found",Toast.LENGTH_SHORT).show();
}
//updateUI(user);
} else {
// If sign in fails, display a message to the user.
Log.w("TAG", "signInWithCredential:failure", task.getException());
Toast.makeText(login.this,"Auth Failed",Toast.LENGTH_SHORT).show();
//updateUI(null);
}
// ...
}
});
}
答案 0 :(得分:0)
GoogleSignInAccount的getId():
如果您从`new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)或配置了requestId()开始构建配置,则返回Google帐户的唯一ID;否则为null。
这是用于用户记录的首选唯一键。
FirebaseUser的getUid()时:
返回一个字符串,用于在Firebase项目的用户数据库中唯一标识您的用户。在Firebase数据库或存储中甚至在您自己的后端中存储信息时,请使用它。
此标识符是不透明的,不一定与用户的电子邮件地址或任何其他字段相对应。
使用Firebase服务时,最好使用Firebase身份验证提供的uid。根据官方文档:
用户首次登录后,将创建一个新的用户帐户并将其链接到用户登录所用的凭据(即用户名和密码,电话号码或身份验证提供者信息)。这个新帐户存储在Firebase项目中,无论用户如何登录,都可以用来在项目中的每个应用程序中识别用户。