使用自定义ID的Firebase身份验证

时间:2018-10-16 15:30:09

标签: android firebase firebase-authentication

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

*请注意,我是Firebase和任何移动应用程序开发领域的一名新手。希望你们能接受我的基本问题。

1 个答案:

答案 0 :(得分:0)

您可以使用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) {

                        }
                    });