【问题标题】:UserId returning null用户 ID 返回 null
【发布时间】:2020-03-05 17:22:06
【问题描述】:

我的应用程序返回一个空 UID。在注册时,我正在使用电话身份验证来注册并从用户那里获取一些自定义字段,这些字段我保存在 Firebase 数据库中的当前用户 UID 下。在注册活动中,它完美地给了我 UID,但是当我通过凭据登录用户并成功登录时,它会将用户转移到 MainActivity,当时它给了我 null。

注意

我通过匹配我在注册时保存的数据库中的用户名和密码来登录用户。这是我没有使用任何 Firebase 登录方法的 UID 的问题吗?相反,我在登录活动中匹配来自数据库的值,并且在成功匹配时我登录了用户。因为如果有任何其他问题,它也不会在 Register Activity 上给我一个 UID,但是登录后它在 Main ActivityProfile 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);

登录后在 Main Activity 中返回 null。

如果我通过匹配 Firebase 实时数据库中的值登录,我是获取用户的 UID 还是获取 UID?必须使用一些 Firebase 身份验证来登录(电子邮件/密码或电话身份验证或 Gmail 登录等)

【问题讨论】:

  • 请编辑问题以显示未按您期望的方式工作的代码。我们应该能够准确地追踪您在此处解释的内容。
  • 添加您的活动代码,您正在执行登录过程和访问 uid。
  • @DougStevenson 编辑了代码
  • 你完全错了,检查一下。 Firebase login and signup with username
  • @HaiderSaleem 这与我使用 firebase otp 创建用户(电话身份验证)和获取用户个人资料数据完全不同

标签: android firebase firebase-realtime-database firebase-authentication


【解决方案1】:

经过大量调试和浏览 Firebase 文档后,我得出的结论是,要获取用户 UID,必须使用任何 Firebase 身份验证方法登录。我得到空值,因为我正在匹配 Firebase 数据库中的值,如果它们匹配,我将用户登录。

在所有这些过程中,Firebase 并不知道我是谁。因为我只使用它的数据库,而不是它的官方登录方法,如电子邮件、密码等。所以这就是我得到一个空 UID 的原因。

就注册而言,我使用Phoneauthentication自动验证后验证号码。当我使用其身份验证时,Firebase 为我提供了该用户的 UID,因此当时它将我识别为用户并分配给我一个唯一编号,我获得该编号并为我在注册时使用 Firebase 身份验证保存的自定义数据创建父节点.

然后在登录中,在匹配用户凭据时,我可以通过此代码将该 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));
                    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-16
    • 1970-01-01
    • 2017-10-10
    • 2014-12-26
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    相关资源
    最近更新 更多