2017-03-14 33 views
0

嘿,我正在开发一款应用程序,让学生保存他们的日程安排,并在需要时随时访问它。 我将他们的时间表保存在Firebase数据库中,并将唯一ID附加到每个用户,并将他们的课程名称和学校小时保存为独特ID。使用为每个用户生成的唯一密钥限制Firebase数据库规则。 (Android studio)

问题是,我如何设置firebase规则来限制每个用户只修改存储在他的唯一密钥下的数据。

它看起来像这样 it looks like this

规则目前公众进行测试。

回答

1

-K...值似乎是推送ID,它不是有效的Firebase身份验证UID。因此,我感觉您的用户无法登录。虽然您肯定能够推出一个系统,其中推送ID可识别用户,但这些ID不会传递给Firebase身份验证或Firebase数据库安全规则。说实话:如果它们继续存在,那将是相当不安全的。

如果您想安全地识别用户而不要求他们使用电子邮件+密码或社会提供者登录,请使用Firebase's anonymous authentication。对用户来说,它的工作原理是相同的:他们不需要登录。但是对于Firebase,这意味着他们是具有真实UID的正确身份验证用户。和代码很简单,只要:

FirebaseAuth.getInstance().signInAnonymously() 
    .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
     @Override 
     public void onComplete(@NonNull Task<AuthResult> task) { 
      Log.d(TAG, "signInAnonymously:onComplete:" + task.isSuccessful()); 

      // If sign in fails, display a message to the user. If sign in succeeds 
      // the auth state listener will be notified and logic to handle the 
      // signed in user can be handled in the listener. 
      if (!task.isSuccessful()) { 
       Log.w(TAG, "signInAnonymously", task.getException()); 
       Toast.makeText(AnonymousAuthActivity.this, "Authentication failed.", 
         Toast.LENGTH_SHORT).show(); 
      } 

      // ... 
     } 
    }); 

并检测用户签署的(这也挑选他们时,他们又重新启动应用程序):

FirebaseAuth.getInstance().addAuthStateListener(new FirebaseAuth.AuthStateListener() { 
    @Override 
    public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
     FirebaseUser user = firebaseAuth.getCurrentUser(); 
     if (user != null) { 
      // User is signed in 
      Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid()); 
     } else { 
      // User is signed out 
      Log.d(TAG, "onAuthStateChanged:signed_out"); 
     } 
     // ... 
    } 
}; 
+0

感谢,我在哪里把这个寿?无论我想在哪里签名? – Daniel

+0

第一个片段是你实际签名的地方。第二个片段应该放在'onCreate'或'onStart'中。请查看我链接的文档以作进一步解释,因为它包含我在上面复制的工作代码。 –

相关问题