2016-07-29 125 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

相關問題