rap*_*phh 7 android firebase firebase-security firebase-authentication firebase-realtime-database
我想通过身份验证在我的数据库中读取和写入,但我得到了Permission denied两者.我试图找出它为什么不起作用.
我使用默认规则,因为我想要身份验证,如文档中所述.
默认规则需要身份验证.它们允许对应用程序的经过身份验证的用户进行完全读写>访问.如果您希望数据打开>应用程序的所有用户但不希望它向全世界开放,则它们非常有用.
Firebase规则:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
Run Code Online (Sandbox Code Playgroud)创建用户 :
auth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
Log.d("USER_CREATE", "createUserWithEmail: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()) {
Toast.makeText(getApplicationContext(), "Authentication failed.",
Toast.LENGTH_SHORT).show();
} else {
startActivity(new Intent(SignupActivity.this, MainActivity.class));
finish();
}
// ...
}
});
Run Code Online (Sandbox Code Playgroud)登录用户:
auth.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
Log.d("COMPLETE", "signInWithEmail:onComplete:" + task.isSuccessful());
}
});
Run Code Online (Sandbox Code Playgroud)我得到了一个AuthListener,它记录了用户已登录的情况.
AuthListener:
mAuthListener = 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");
}
// ...
}
};
// ...
Run Code Online (Sandbox Code Playgroud)读测试:(我在数据库中手动添加了一个节点)
firebase.child("test").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
Log.d("result", snapshot.getValue()+"");
}
@Override
public void onCancelled(FirebaseError error) {
Log.d("The read failed: ", error.getMessage());
}
});
Run Code Online (Sandbox Code Playgroud)写测试:我想要一个users包含两类用户的主节点:devs和employers.
Firebase usersRef = firebase.child("users").child("devs");
FirebaseUser user = auth.getCurrentUser();
Map<String, String> userMap = new HashMap<String, String>();
userMap.put("name", "blabla");
userMap.put("city", "Brussels");
Map<String, Map<String, String>> users = new HashMap<String, Map<String, String>>();
users.put(user.getUid().toString(), userMap);
usersRef.setValue(users);
Run Code Online (Sandbox Code Playgroud)日志:
D/AUTH LISTENER: onAuthStateChanged:signed_in:wnomkwiOWOb4wNNLSsrWeT5xxUq1
D/USER_CREATE: createUserWithEmail:onComplete:true
I/AppCompatViewInflater: app:theme is now deprecated. Please move to using android:theme instead.
D/ACTION BAR?: android.support.v7.app.ToolbarActionBar@36c3cd2a
W/SyncTree: Listen at /test failed: FirebaseError: Permission denied
D/The read failed:: Permission denied
D/FirebaseAuth: Notifying listeners about user ( wnomkwiOWOb4wNNLSsrWeT5xxUq1 ).
D/FirebaseAuth: Notifying listeners about user ( wnomkwiOWOb4wNNLSsrWeT5xxUq1 ).
D/FirebaseApp: Notifying auth state listeners.
D/FirebaseApp: Notified 0 auth state listeners.
D/AUTH LISTENER: onAuthStateChanged:signed_in:wnomkwiOWOb4wNNLSsrWeT5xxUq1
D/FirebaseApp: Notifying auth state listeners.
D/FirebaseApp: Notified 0 auth state listeners.
D/AUTH LISTENER: onAuthStateChanged:signed_in:wnomkwiOWOb4wNNLSsrWeT5xxUq1
D/COMPLETE: signInWithEmail:onComplete:true
Run Code Online (Sandbox Code Playgroud)我使用公共权限进行了这两个测试(写:true,读取:true)并且它正常工作,因此我的身份验证必定存在问题.我可能误解/遗漏了一些东西但却没有真正看到究竟是什么.如果有人想开导我会很好!
您将旧的 Firebase SDK 与新的 Firebase SDK 混合在一起。从 build.gradle 中删除 firebase-android-sdk 2.5.2 并更新导入以使用新DatabaseReference类而不是该类Firebase。
| 归档时间: |
|
| 查看次数: |
1439 次 |
| 最近记录: |