用户登录并且会话处于活动状态后,由于权限被拒绝错误,无法读取/写入数据。规则是标准的:
// 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 Database tree view from console
应用程序/ 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'
依赖项。它编译错误“无法解决”。
答案 0 :(得分:1)
好的,我所期待的问题已经与Firebase更新有关。请按照最新更新[当此答案发布时为9.4.0]并从旧版本迁移到最新版本。
如果您对graddle文件解析有问题,您应该更新:
希望它会对你有所帮助。保持更新。
答案 1 :(得分:0)