Firebase 权限在身份验证后被拒绝 [英] Firebase Permission denied after auth
问题描述
我正在制作一个安卓应用程序.我首先使用电子邮件和密码登录用户,然后在 OnComplete 方法中,如果任务成功,我将尝试访问数据库中的数据.但是每次我收到消息 Listen at/failed.
I am making an android application. I first login the user with email and password and then in OnComplete method,if the task is successful, I am trying to access data on the database. But every time I get the message Listen at / failed.
我的主要活动代码如下 -
My Main Activity code is as follows -
private FirebaseAuth auth;
private EditText inputEmail, inputPassword;
private Button btnLogin;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Firebase.setAndroidContext(this);
//Get Firebase auth instance
auth = FirebaseAuth.getInstance();
if (auth.getCurrentUser() != null) {
startActivity(new Intent(MainActivity.this, MainActivity.class));
finish();
}
setContentView(R.layout.activity_main);
inputEmail = (EditText) findViewById(R.id.txtMobile);
inputPassword = (EditText) findViewById(R.id.txtPassword);
btnLogin = (Button) findViewById(R.id.btnLogin);
auth = FirebaseAuth.getInstance();
btnLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String email = inputEmail.getText().toString();
final String password = inputPassword.getText().toString();
//authenticate user
auth.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(MainActivity.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
// 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()) {
// there was an error
Log.e("Invalid","Invalid");
} else {
/*Intent intent = new Intent(MainActivity.this, Second.class);
startActivity(intent);
finish();*/
Firebase.getDefaultConfig();
auth = FirebaseAuth.getInstance();
if (auth.getCurrentUser() != null) {
Log.e("awesome",auth.getCurrentUser().getEmail());
}
Firebase firebase = new Firebase("https://test-fd3f2.firebaseio.com");
firebase.addChildEventListener(new ChildEventListener() {
// Retrieve new posts as they are added to Firebase
@SuppressWarnings("unchecked")
@Override
public void onChildAdded(DataSnapshot snapshot, String previousChildKey) {
if(snapshot.getValue()!= null) {
String mobileNum = snapshot.getValue().toString();
Log.e("here", mobileNum);
}
//Log.e("Title: ",newPost.get("password").toString());
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(FirebaseError firebaseError) {
Log.e("Cancel",firebaseError.getCode()+"");
Log.e("Cancel",firebaseError.getDetails());
Log.e("Cancel",firebaseError.getMessage());
}
//... ChildEventListener also defines onChildChanged, onChildRemoved,
// onChildMoved and onCanceled, covered in later sections.
});
}
}
});
}
});
}
更新-我的firebase规则如下-
UPDATE - My firebase rules is as follows-
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
推荐答案
您正在混合不同的 Firebase SDK:
You're mixing different Firebase SDKs:
auth.signInWithEmailAndPassword()
来自新的 3.x/9.x Firebase SDKnew Firebase()
来自 Firebase 2.x SDK
auth.signInWithEmailAndPassword()
is from the new 3.x/9.x Firebase SDKnew Firebase()
is from the Firebase 2.x SDK
登录到新 SDK,将不会验证与旧 SDK 版本建立的数据库连接.所以你的数据库连接仍然是未经验证的.
Signing in to the new SDK, will not authenticate the connection to the database made with the older SDK version. So your database connection is still unauthenticated.
解决方案是对 build.gradle 文件中的所有 Firebase 库使用单一版本 (9.x)
The solution is to use a single version (9.x) for all Firebase libraries in your build.gradle file
这篇关于Firebase 权限在身份验证后被拒绝的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!