嘿我正在开发一款应用程序,让学生可以保存他们的日程安排,并在需要时随时访问。 我将他们的日程安排保存在firebase数据库中,为每个用户添加唯一ID,并将他们的课程名称和相应的学时作为孩子保存到唯一ID中。
问题是,如何设置firebase规则以限制每个用户仅修改存储在其唯一密钥下的数据。
它看起来像这样规则目前公开用于测试。
答案 0 :(得分: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");
}
// ...
}
};