【问题标题】:Role-based authentification in android app using Firebase使用 Firebase 在 Android 应用中进行基于角色的身份验证
【发布时间】:2020-08-17 02:49:52
【问题描述】:

我正在开发一个 android 应用程序并使用 firebase 数据库。它包含不同角色的授权和少量活动。如果您以“安装者”的身份进入,则打开一项活动,如果以“联络中心”的身份进入 - 另一项活动,但现在这并不重要。所以我需要检查输入的一对电子邮件和密码的角色。那我该怎么办?

这是我的数据库结构:

登录代码:

mAuth.signInWithEmailAndPassword(email,pass).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
    @Override
    public void onComplete(@NonNull Task<AuthResult> task) {
        if(task.isSuccessful()){
            Toast.makeText(MainActivity.this,"Аутентификация прошла успешно",Toast.LENGTH_SHORT).show();
            startActivity(new Intent(getApplicationContext(),RoleInstallerForm.class));
        }
        else {
            Toast.makeText(MainActivity.this,"Проверьте правильность введённых данных", Toast.LENGTH_SHORT).show();
                            ProgressBar.setVisibility(View.GONE);
        }
    }
});

【问题讨论】:

  • 如果您尝试过任何代码,请添加一些代码并详细说明您的问题。 . .
  • 我没有可以解决我的问题的代码,我尝试使用 Firebase 进行默认授权(来自助手的示例)。那是我在 android studio 的第一个项目,所以我只能在网上搜索。我想要什么:从 firebase 数据库获取用户角色以打开适当的页面。 Atm i 使用用户列表(firebase 控制台中的身份验证点)并且没有任何方法可以为用户分配角色。如果我创建自定义数据库并使用用户数据填充它,我可以创建一个捕获一对电子邮件并传递适当角色的方法(我已经从上面的 c# 和 sql 中编写了一个示例)并进一步使用它。
  • 我只需要方向(尝试​​使用 c# 和 sql 中的数据库数据或使用 firestone 的自定义声明)。只是我不知道什么是可能的,atm 网络没有给我答案。
  • 是的,当新用户注册时,您必须更新数据库中的角色。并在您需要时在应用程序中获取它。我不知道您的应用程序结构将如何,也不知道您将如何处理这些角色,所以我帮不上什么忙。如果您可以添加更多信息,我可以提供帮助。 :-)
  • 现在的结构:Auth 页面,2 个不同的页面用于适当的角色和带有设置的 mb 页面。我想要的 atm:在进行身份验证时,获取用户的角色并基于它打开页面并在某个地方显示他的名字。

标签: android firebase firebase-security roles user-roles


【解决方案1】:

将您的代码修改为:

mAuth.signInWithEmailAndPassword(email,pass).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
    @Override
    public void onComplete(@NonNull Task<AuthResult> task) {
        if(task.isSuccessful()){
            Toast.makeText(MainActivity.this,"Àóòåíòèôèêàöèÿ ïðîøëà óñïåøíî",Toast.LENGTH_SHORT).show();

            try {
                currentUserUID = FirebaseAuth.getInstance().getCurrentUser().getUid();
            }catch (Throwable throwable){
                throwable.printStackTrace();
            }

            roleRef = FirebaseDatabase.getInstance().getReference().child("Users").child(currentUserUID).child("Role");
            roleRef.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    try {
                        String userRole = dataSnapshot.getValue().toString();
                        //Add if-else here if you need any
                        //For example:
                        //I DONT UNDERSTAND RUSSIAN ROLE YOU TYPE
                        // JUST REPLACE THE ROLE NAMES
                        if(userRole.equals(leader)){
                            startActivity(new Intent(MainActivity.this, some-activity.class));
                        }else{
                            startActivity(new Intent(MainActivity.this, other-activity.class));
                        }
                    }catch (Throwable e){
                        Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_SHORT).show();
                    }
                 }
                 @Override
                 public void onCancelled(@NonNull DatabaseError databaseError) {
                     Toast.makeText(getApplicationContext(), databaseError.toString(), Toast.LENGTH_SHORT).show();
                 }
             });   

         }
         else {
             Toast.makeText(MainActivity.this,"Ïðîâåðüòå ïðàâèëüíîñòü ââåä¸ííûõ äàííûõ", Toast.LENGTH_SHORT).show();
             ProgressBar.setVisibility(View.GONE);
         }
     }
 });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    • 2011-05-17
    • 2021-09-28
    • 1970-01-01
    • 2015-04-06
    • 2019-04-23
    • 2020-07-14
    相关资源
    最近更新 更多