[英]Android default Firebase Permission denied even after user Authenticated
用戶登錄並且會話處於活動狀態后,由於權限被拒絕錯誤,無法讀取/寫入數據。 規則是標准的:
// These rules require authentication
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
FirebaseAuth工作正常,所有憑據都可以從根Firebase節點訪問,但沒有任何內容。
檢索實例沒有任何問題:
mAuth = FirebaseAuth.getInstance();
Firebase Auth(使用電子郵件和密碼方案)代碼:
public void signIn(String email, String password) {
mAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (!task.isSuccessful()) {
showAlert(Values.ERROR, Values.WRONG_EMAIL_OR_PASSWORD_ALERT);
} else {
changeStatus(FirebaseAuth.getInstance().getCurrentUser());
startActivity(new Intent(mTab.getContext(), MainActivity.class));
}
mProgress.hide();
}
});
}
在設置Firebase上下文之前:
Firebase.setAndroidContext(mTab.getContext());
即使在成功登錄后,由於權限失敗,我無法訪問我的數據庫:
public void changeStatus(FirebaseUser user, String status) {
Firebase.setAndroidContext(getContext());
mStatusRef = new Firebase(Values.FIREBASE_ADDRESS + "/statuses/" + user.getUid() + "/");
mStatusRef.setValue(status);
}
要么
public void setLastMessage(final MyViewHolder holder, String uid) {
Firebase.setAndroidContext(mView.getContext());
mMessageRef = new Firebase(Values.FIREBASE_ADDRESS + "/users/" + mUser.getUid() + "/chats/" + uid + "/message");
mMessageRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
holder.lastMessage.setText(dataSnapshot.getValue().toString());
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
}
控制台出錯:
W/RepoOperation: setValue at /statuses/ghTGuwjc4saAQqyJgoMONV2Rz483 failed: FirebaseError: Permission denied
W/SyncTree: Listen at /party failed: FirebaseError: Permission denied
我的JSON樹具有以下結構: 來自控制台的Firebase數據庫樹視圖
應用程序/ build.graddle:
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "GGG.GGG.com.GGG"
minSdkVersion 19
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
}
}
repositories {
maven {
url "https://jitpack.io"
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.3.0'
compile 'com.android.support:design:23.3.0'
compile 'com.firebase:firebase-client-android:2.5.2+'
compile 'com.google.firebase:firebase-auth:9.2.0'
compile 'com.android.support:recyclerview-v7:23.1.1'
compile 'com.android.support:cardview-v7:23.0.+'
compile 'com.github.castorflex.smoothprogressbar:library:1.0.0'
compile 'com.yalantis:phoenix:1.2.3'
compile 'com.facebook.network.connectionclass:connectionclass:1.0.1'
compile 'com.nineoldandroids:library:2.4.0'
compile 'com.daimajia.easing:library:1.0.1@aar'
compile 'com.daimajia.androidanimations:library:1.1.3@aar'
compile 'com.roughike:swipe-selector:1.0.6'
compile 'com.amulyakhare:com.amulyakhare.textdrawable:1.0.1'
}
apply plugin: 'com.google.gms.google-services'
我的應用程序包含MainActivity和ViewPager小部件。 但根據Firebase文檔,只要FirebaseAuth實例可以訪問,這意味着會話處於活動狀態(因此用戶通過身份驗證)。
也許我錯過了什么? 我曾多次嘗試閱讀Firebase文檔(一切都非常清晰易懂),但感覺我的問題在上下文中是獨一無二的。
我將規則更改為Public僅用於開發目的,但是在最終版本發布后我不能讓我的數據庫向所有人開放...
可能有什么問題?
我正在使用Firebase控制台和此Android設置指南:
出於某種原因,我無法將我的graddle文件升級到最新的Firebase版本'com.google.firebase:firebase-core:9.4.0'
依賴項。 它編譯錯誤“無法解決”。
好的,我所期待的問題已經與Firebase更新有關。 請按照最新更新[當此答案發布時為9.4.0]並從舊版本遷移到最新版本。
Firebase從“com.firebase:firebase-client-android:xxx”更新為“com.google.firebase:firebase-database:9.4.0”
如果你有解決graddle文件的問題,你應該更新你的:
希望它會對你有所幫助。 保持更新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.