2016-07-29 23 views
3

如何在Firebase Android应用程序中添加用户角色身份验证?从我所看到的,firebase只有电子邮件和密码认证。我想开发一个具有2+用户角色的Android应用程序。例如,如果普通会员登录,他将转到normal_memberActivity,如果他是高级会员,他将转到premium_memberActivity。如何在Firebase中添加角色?无法找到像我这样的类似问题。如何区分Firebase中的用户角色?

通常情况下,我会做这样的:

String role = intent.getStringExtra("role"); 

if (role.equals("admin")){ 
FragmentManager fm = getSupportFragmentManager(); 
fm.beginTransaction().replace(R.id.content_frame, new AdminHomeFragment()).commit(); 
}else{ 
FragmentManager fm = getSupportFragmentManager(); 
fm.beginTransaction().replace(R.id.content_frame, new NormalFragment()).commit(); 
} 
+0

您应该将用户保存在实时数据库中。这样,您可以使用角色属性为您创建自定义用户。所以每次用户登录时,都可以检查他在数据库上的角色。 –

+0

@RosárioPereiraFernandes与Auth有什么不同?如果我要为我的用户使用实时数据库,那么对于朋友系统来说它是否也可以使用? – Gian7

+0

是的,这是创建好友系统的最佳方式。我希望你熟悉数据库。如果你使用SQL数据库,这可能看起来有点不同(因为firebase使用NoSQL JSON数据库),但你会习惯它。 –

回答

6

可以在火力数据库中存储用户的UID和他们的角色添加一个角色节点。

"roles" : { 
    "uid1" : "normal", 
    "uid2" : "premium", 
    "uid3" : "normal", 
} 

然后你就可以得到角色值,而用户又在

ref.child("roles").child(firebaseUser.getUid()).addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     String role = dataSnapshot.getValue(String.class); 
     // check role and replace fragment 
    } 
    @Override 
    public void onCancelled(DatabaseError databaseError) {} 
}); 
+0

稍后再试! :)顺便说一下,你还可以给我一个注册普通用户和高级用户的片段吗?完全不知道。谢谢! – Gian7

+0

@ Gian7关注[本指南](https://firebase.google.com/docs/auth/android/password-auth),您可以将该值设置为“addOnCompleteListener”下的“roles”节点 – Wilik

1

成功签约火力地堡刚刚推出支持通过ID令牌上的自定义用户权利上的任何用户基于角色的访问:https://firebase.google.com/docs/auth/admin/custom-claims

您需要定义的高级访问规则:

{ 
    "rules": { 
    "premiumContent": { 
     ".read": "auth.token.role === 'premium'", 
     ".write": "auth.token.role === 'premium'", 
    } 
    } 
} 

设置与管理SDK用户角色:

// Set admin privilege on the user corresponding to uid. 
admin.auth().setCustomUserClaims(uid, {role: 'premium'}).then(() => { 
    // The new custom claims will propagate to the user's ID token the 
    // next time a new one is issued. 
}); 

这将传播到相应的用户ID令牌声明。

要从客户端上的令牌解析它,您需要base64解码ID令牌的有效负载。

您可以根据需要升级/降级用户。他们还提供了编程方式来列出所有用户,如果您有重复脚本来更改用户的访问级别:https://firebase.google.com/docs/auth/admin/manage-users#list_all_users

相关问题