我的应用程序正在给我返回一个空UID。注册时,我使用电话身份验证从用户那里注册并获得一些自定义字段,我将其保存在Firebase数据库中当前用户UID下。在注册活动中,它完美地为我提供了UID,但当我通过凭证登录用户并成功登录时,它将用户转移到MainActivity,并在当时给我null。
Note
我是通过从我在注册时保存的DB中匹配他/她的用户名和密码来登录用户的。这是我没有得到UID的问题吗?我没有使用任何Firebase signin方法?相反,我在登录活动中匹配来自DB的值,在成功匹配时,我在用户中登录。因为如果有任何其他问题,它也不会在注册活动上给我一个UID,但是在登录后,它给我在主活动和Profile Activity上的null。
签名码
FirebaseDatabase.getInstance().getReference().child("Content").child("Profiles").orderByChild("mobile_number").equalTo(mobileNum)
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
for (DataSnapshot user : dataSnapshot.getChildren()) {
Profiles profiles = user.getValue(Profiles.class);
if (profiles.getPassword().equals(password)) {
progressDialog.dismiss();
startActivity(new Intent(LoginActivity.this, MainActivity.class));
}
else {
progressDialog.dismiss();
HelperClass.showSnakbarMsg(rootView, "Username or password did not match. Please try again.");
}
}
}代码不工作的
FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
String userId = firebaseAuth.getUid();
Log.d("user",userId);登录后在主活动中返回null。
如果我通过匹配Firebase实时数据库中的值登录,我是获得用户的UID还是获取UID?必须使用一些Firebase身份验证来登录,例如(电子邮件/密码、电话身份验证或Gmail登录等)。
发布于 2020-03-05 19:42:29
经过大量的调试和浏览Firebase文档,我得出了这样的结论:要获得用户UID,必须使用任何Firebase身份验证方法来登录。我获得null,因为我正在匹配Firebase数据库中的值,如果它们匹配,我将用户登录。
在整个过程中,Firebase不知道我是谁。因为我只使用它的DB,而不是它的官方登录方法,比如电子邮件、密码等等。所以这就是我获得空UID的原因。
至于注册,我是使用电话认证,以核实号码后,自动核实。在我使用它的身份验证时,Firebase为该用户提供了一个UID,因此在那个时候,它将我识别为一个用户,并为我在注册时使用Firebase身份验证保存的自定义数据分配了一个唯一的编号,并使其成为父节点。
然后在Login中,在匹配用户凭据的同时,我可以通过这段代码获得UID作为其值的父节点,您可以通过将UID保存在共享首选项中或将意图从一个活动传递到另一个活动来使用它。
FirebaseDatabase.getInstance().getReference().child("Content").child("Profiles").orderByChild("mobile_number").equalTo(mobileNum)
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
for (DataSnapshot user : dataSnapshot.getChildren()) {
** String key = user.getKey(); **
Toast.makeText(LoginActivity.this, key, Toast.LENGTH_SHORT).show();
Profiles profiles = user.getValue(Profiles.class);
if (profiles.getPassword().equals(password)) {
progressDialog.dismiss();
startActivity(new Intent(LoginActivity.this, MainActivity.class));
}https://stackoverflow.com/questions/60550874
复制相似问题