【问题标题】:How get another user data from firebase?如何从 firebase 获取其他用户数据?
【发布时间】:2019-09-18 08:48:59
【问题描述】:

我希望当用户点击管理员配置文件时,用户可以看到管理员信息。 我使用 currentUser 来获取已在应用程序中登录的当前用户的 id。

我想知道如何获取另一个用户数据。

    String currentuser = FirebaseAuth.getInstance().getCurrentUser().getUid();


    // init firebase database
    mUserDatabaseReference = FirebaseDatabase.getInstance().getReference("Users");

    mUserDatabaseReference.child(currentuser).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {


            // here using Picasso for get the image url and set in ImageView
            String imageUrl = dataSnapshot.child("profile_pic").getValue().toString();
            Picasso.with(AboutCompany_for_users.this).load(imageUrl).into(companyPhoto);


            String name = dataSnapshot.child("name").getValue().toString();
            String email = dataSnapshot.child("email").getValue().toString();
            String phone = dataSnapshot.child("mobile").getValue().toString();
            String busesNumbers = dataSnapshot.child("buses_numbers").getValue().toString();
            String lineName = dataSnapshot.child("bus_line").getValue().toString();


            // here we get the data from
            companyName.setText(name);
            companyEmail.setText(email);
            companyPhone.setText(phone);
            companyBusesNumbers.setText(busesNumbers);
            companyLineName.setText(lineName);

        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

    driversInformations.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent driversInfo = new Intent(AboutCompany_for_users.this, CompanyDrivers.class);
            startActivity(driversInfo);
        }
    });

我希望当用户点击管理员配置文件时显示管理员信息而不是当前用户信息

【问题讨论】:

    标签: android firebase firebase-authentication


    【解决方案1】:

    您无法从客户端代码查询 Firebase 身份验证中的其他用户帐户。你必须要么

    1. 将其他用户的数据存储在数据库中,然后查询该数据库。
    2. 调用一些后端代码并使用 Firebase Admin SDK 执行查询,并将其返回给客户端。

    通常人们会选择选项 1。

    【讨论】:

      【解决方案2】:

      创建 Cloud Functions 并使用 Firebase Admin SDK。

      您可以通过 uid 或电子邮件或电话号码获取其他用户数据。

      您可以列出每个用户最多 1000 个。

      如果您使用 node.js 创建云函数,那么代码是这样的。

      // get another user data by uid
      exports.getUser = functions.https.onCall(async (data, context) => {
        try {
          // if you want to deny unauthorized user
          // - context.auth.token.xxx is customClaims. (if you use)
          // if (context.auth || context.auth.uid || context.auth.token.xxx) {
          //   return Promise.reject("unauthorized");
          // }
      
          const user = await admin.auth().getUser(data.uid);
          return {
            displayName: user.displayName,
            email: user.email,
            photoURL: user.photoURL
          };
        } catch (error) {
          // If user does not exist
          if (error.code === "auth/user-not-found") {
            return {};
          }
          throw error;
        }
      });
      

      见:

      【讨论】:

      • 上述帖子中的底部 4 个链接返回 404。它们应该更新。
      【解决方案3】:

      您可以创建一个 Firebase cloud functions 并从您的 Android 应用程序中调用该函数 接下来,在该函数下,您可以检索相应用户的数据并将其作为结果返回给您的Android 应用程序。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-02
        • 2017-12-20
        • 1970-01-01
        • 2020-11-05
        相关资源
        最近更新 更多