使用为每个用户生成的唯一密钥来限制 Firebase 数据库规则。 (Android 工作室)
Restrict Firebase Database rules using unique key generated to every user. (Android studio)
嘿,我正在开发一个应用程序,让学生学生保存他们的日程安排并在需要时访问它。
我将他们的时间表保存在 firebase 数据库中,为每个用户附加唯一 ID,并将他们的课程名称和各自的上课时间保存到唯一 ID。
问题是,如何设置 firebase 规则来限制每个用户只能修改存储在其唯一密钥下的数据。
看起来像这样
规则目前 public 用于测试。
-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");
}
// ...
}
};
嘿,我正在开发一个应用程序,让学生学生保存他们的日程安排并在需要时访问它。 我将他们的时间表保存在 firebase 数据库中,为每个用户附加唯一 ID,并将他们的课程名称和各自的上课时间保存到唯一 ID。
问题是,如何设置 firebase 规则来限制每个用户只能修改存储在其唯一密钥下的数据。
看起来像这样
规则目前 public 用于测试。
-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");
}
// ...
}
};