我只需要对经过身份验证的用户提供读/写访问权限,但似乎Firebase无法识别用户是否经过身份验证。
在我使用电子邮件和密码登录用户后,我假设用户已通过身份验证,应该允许从数据库读取/写入。但是许可被拒绝。
以下是登录活动的代码:
firebaseAuth.signInWithEmailAndPassword(email, password) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
//checking if success
if(task.isSuccessful()){
//display some message here
// Toast.makeText(Register.this,"Successfully registered",Toast.LENGTH_LONG).show();
sRef.authWithPassword(email,password,new Firebase.AuthResultHandler() {
@Override
public void onAuthenticated(AuthData authData) {
Toast.makeText(Register.this, user.getDisplayName()+" is authenticated",Toast.LENGTH_LONG).show();
}
@Override
public void onAuthenticationError(FirebaseError firebaseError) {
}
});
Intent i = new Intent(Register.this,MainActivity.class);
startActivity(i);
}else{
//display some message here
Toast.makeText(Register.this, task.getException().getMessage(),Toast.LENGTH_LONG).show();
}
}
});
我想在firebase中使用默认规则,只允许auth用户从数据库读/写:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
但是当我更改下面的规则时,我的代码能够获得对数据库的读/写访问权限。
{
"rules": {
".read": true,
".write":true
}
}
这在测试中很好,但我无法继续使用此方法进行生产。请帮助,如何验证注册用户访问Firebase中的数据库。
答案 0 :(得分:3)
您的代码是旧版2.x.x的API调用的混合。 SDK,例如:
sRef.authWithPassword(email,password,new Firebase.AuthResultHandler()
和新的9.x.x SDK:
firebaseAuth.signInWithEmailAndPassword()
这两个SDK不兼容。你需要使用或其他。 Upgrade Guide说明了如何从旧SDK迁移到新SDK。
您还需要使用与所使用的SDK对应的Firebase控制台:Legacy Console或新的Firebase Console。