【问题标题】:Organize Firebase database for individual users, idea?为个人用户组织 Firebase 数据库,想法?
【发布时间】:2018-02-16 17:15:44
【问题描述】:

在我的 android 应用中,我使用 Firebase Auth 程序实现了 google 登录。 如:

private void signIn() {
    Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
    startActivityForResult(signInIntent, SIGNIN_CODE);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == SIGNIN_CODE) {
        Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
        try {
            // Authenicate with my Firebase
            GoogleSignInAccount account = task.getResult(ApiException.class);
            ProgressDialog dialog = new ProgressDialog(this); //ProgressDialog.show(this, null, "Please wait while we load sign in..", true);
            dialog.setMessage("Please wait while we load sign in..");
            dialog.setIndeterminate(true);
            Drawable drawable = new ProgressBar(this).getIndeterminateDrawable().mutate();
            drawable.setColorFilter(ContextCompat.getColor(this, R.color.progress),
                                    PorterDuff.Mode.SRC_IN);
            dialog.setIndeterminateDrawable(drawable);
            dialog.show();

            firebaseAuthWithGoogle(account);
        } catch (ApiException e) {
            // Google Sign In failed?
            Log.w(TAG, "Google sign in failed", e);
        }
    }
} //A lot more stuffs etc etc..

我已经有一个 SQlite 离线数据库。现在仅适用于登录用户,我希望用户可以将 SQlite 数据库的内容与 firebase 数据库同步,用户可以稍后在线访问/同步。

但是如何为具有 UID 等的个人登录用户组织单个 firebase 数据库?

更具体的建议/教程会很好:)

【问题讨论】:

    标签: android firebase firebase-realtime-database firebase-authentication


    【解决方案1】:

    可以做到,您需要限制对数据的访问,以便每个用户只能通过定义如下 Firebase 安全规则来访问他/她的数据。

    service cloud.firestore {
      match /databases/{database}/documents {
        match /yourrootnode/{uid} {
          allow read, write: if request.auth.uid == uid;
        }
    }
    

    从应用程序保存用户特定数据,如下所示,这里 dataModelObj 对象应包含 uid 字段,您需要从用户对象中填充它 dataModelObj .setUid(user.getUid());

      firestoreDB.collection("yourrootnode")
                .add(dataModelObj)
                .addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
    
    .....
    

    然后你可以像这样在应用程序中只读取用户数据。

     firestoreDB.collection("yourrootnode")
                    .whereEqualTo("uid", user.getUid())
                    .get()
                    .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                ....
            } 
    

    更多信息可以查看http://www.zoftino.com/android-firebase-email-password-authentication

    【讨论】:

      【解决方案2】:

      您不能为每个用户创建单独的数据库,但您可以为多个用户组织一个数据库。按照惯例,为用户留出一个数据库节点,并使用 Firebase 身份验证中的 UID 为每个用户创建一个空间。

      例如,您的用户数据库部分可以这样组织:

      /users
          /uid1
              /name
          /uid2
              /name
      

      然后您会希望使用user based security rules 保护每个用户的数据。

      【讨论】:

        猜你喜欢
        • 2023-03-09
        • 2018-09-20
        • 1970-01-01
        • 1970-01-01
        • 2018-02-26
        • 2018-01-31
        • 2017-08-14
        • 2014-04-28
        相关资源
        最近更新 更多