使用为每个用户生成的唯一密钥限制 Firebase 数据库规则。 (安卓工作室)
Posted
技术标签:
【中文标题】使用为每个用户生成的唯一密钥限制 Firebase 数据库规则。 (安卓工作室)【英文标题】:Restrict Firebase Database rules using unique key generated to every user. (Android studio) 【发布时间】:2017-08-04 21:37:37 【问题描述】:嘿,我正在开发一个应用程序,让学生学生保存他们的日程安排并在需要时访问它。 我将他们的时间表保存在 Firebase 数据库中,并为每个用户附加唯一 ID,并将他们的课程名称和作为孩子的各自上课时间保存到唯一 ID。
问题是,我如何设置 firebase 规则来限制每个用户只能修改存储在其唯一键下的数据。
看起来像这样
规则目前是公开的以供测试。
【问题讨论】:
【参考方案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");
// ...
;
【讨论】:
谢谢,我把这个放在哪里?我想在哪里登录? 第一个 sn-p 是您实际登录的位置。第二个 sn-p 应输入onCreate
或 onStart
。请查看我链接的文档以获得进一步解释,因为其中包含我在上面复制的工作代码。以上是关于使用为每个用户生成的唯一密钥限制 Firebase 数据库规则。 (安卓工作室)的主要内容,如果未能解决你的问题,请参考以下文章