使用为每个用户生成的唯一密钥限制Firebase数据库规则。 (Android工作室)

时间:2017-03-14 13:53:35

标签: android firebase firebase-realtime-database firebase-security

嘿我正在开发一款应用程序,让学生可以保存他们的日程安排,并在需要时随时访问。 我将他们的日程安排保存在firebase数据库中,为每个用户添加唯一ID,并将他们的课程名称和相应的学时作为孩子保存到唯一ID中。

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

它看起来像这样 it looks like this

规则目前公开用于测试。

1 个答案:

答案 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");
        }
        // ...
    }
};