嘿,我正在开发一款应用程序,让学生保存他们的日程安排,并在需要时随时访问它。 我将他们的时间表保存在Firebase数据库中,并将唯一ID附加到每个用户,并将他们的课程名称和学校小时保存为独特ID。使用为每个用户生成的唯一密钥限制Firebase数据库规则。 (Android studio)
问题是,我如何设置firebase规则来限制每个用户只修改存储在他的唯一密钥下的数据。
规则目前公众进行测试。
嘿,我正在开发一款应用程序,让学生保存他们的日程安排,并在需要时随时访问它。 我将他们的时间表保存在Firebase数据库中,并将唯一ID附加到每个用户,并将他们的课程名称和学校小时保存为独特ID。使用为每个用户生成的唯一密钥限制Firebase数据库规则。 (Android studio)
问题是,我如何设置firebase规则来限制每个用户只修改存储在他的唯一密钥下的数据。
规则目前公众进行测试。
-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");
}
// ...
}
};
感谢,我在哪里把这个寿?无论我想在哪里签名? – Daniel
第一个片段是你实际签名的地方。第二个片段应该放在'onCreate'或'onStart'中。请查看我链接的文档以作进一步解释,因为它包含我在上面复制的工作代码。 –