【问题标题】:Firebase authentication using custom ID使用自定义 ID 进行 Firebase 身份验证
【发布时间】:2019-03-21 04:45:58
【问题描述】:

我正在尝试创建一个登录页面,用户必须在其中输入自己的唯一 ID 和密码才能登录我的应用程序。唯一 ID 应该已经存在于 firebase 数据库中。例如,用户必须通过 Firebase 身份验证插入他们的学生 ID 和密码。希望得到社会各界的帮助。谢谢。

*注意我是 firebase 和任何移动应用程序开发的新手。如果我问任何基本问题,希望你们能容忍我。

【问题讨论】:

  • 您可以手动将所有唯一的学生 ID 注册到 Student 节点,或者允许学生选择继续注册。
  • @SharkesMonken 感谢您的回复。到目前为止,我已将学生 ID 手动添加到 firebase 实时数据库中的学生表中。是否可以为 firebase 身份验证执行此操作,或者我没有理由使用 f.authentication?
  • 手动或提供注册表不是最实用的方法
  • @AimanSalim 我的回答是否让您更容易一些?

标签: android firebase firebase-authentication


【解决方案1】:

您可以使用 Firebase 数据库存储唯一 ID 和密码,然后在身份验证时检索它。

您可以有一个结构,如主节点users 和一个名为username 的子节点,后者有一个名为password 的子节点。您可以通过名称猜测哪个节点代表什么。

首先,在你的应用中注册,你可以让用户选择他们自己的ID和密码,你可以用类似这样的代码检查你的数据库中是否存在相同的ID:

DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference().child("users");
                    databaseReference.orderByChild("username").equalTo(n).addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                            if(dataSnapshot.exists())
                                Toast.makeText(Main3Activity.this, "Username already exists", Toast.LENGTH_SHORT).show();
                            else
                                writeNewUserNameIfNeeded(n);

                        }

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

                        }
                    });

在上面的代码中n是用户自己输入的用户名。

要在数据库中写入新的用户名或密码,可以使用类似于以下的代码:

private void writeNewUserNameIfNeeded( final String username) {

        DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
        final DatabaseReference usersRef = rootRef.child("users");

        usersRef.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                dataSnapshot.child("username").setValue(username);

            }

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

            }
        });

要检查用户名和密码或授予登录权限,您可以使用类似于此的代码:

DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("users");

ref.orderByChild("username").equalTo(username).addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                            if(dataSnapshot.exists())
                    if(dataSnapshot.child("password").equals(pass))
                              // grant login access with these credentials


                        }

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

                        }
                    });

【讨论】:

  • 我的理解是我可以通过实时数据库火力库来做到这一点,对吧?我已经使用与您相同的方法完成了,其中将学生 ID 的登录页面与实时数据库中的 ID 进行比较。我设法登录并重定向到另一个页面。另一个问题是使用这种方法,有没有办法像在 php 中一样使用 session 登录?
  • 这是使用 Firebase 数据库的方法,我认为使用 php 中的 session 登录不是完全可能的,但您应该查看 Google Docs 以了解更多信息。如果此答案帮助您通过 Firebase 做到这一点,请考虑投票并将其标记为正确。我会很感激的。干杯! :)
  • @AimanSalim,在 Firebase 数据库中使用这种方式是您想要实现的最佳解决方案之一,因为这不仅为您提供了存储数据的安全场所,还为您提供了大量可以处理的选项,可以使您的应用程序中的事情变得更好。
  • 我明白了。如果可以使用firebase,我将尝试使用会话查看登录。感谢您的帮助:)
  • 乐于助人,干杯! :)
猜你喜欢
  • 2016-07-09
  • 2017-01-01
  • 2017-07-03
  • 2020-04-01
  • 2022-12-10
  • 2016-12-16
  • 1970-01-01
  • 2018-05-17
  • 1970-01-01
相关资源
最近更新 更多