Java 云Firestore安全规则权限
如何将用户信息记录到数据库中,并在注册期间启用用户写入数据库的权限Java 云Firestore安全规则权限,java,android,firebase,firebase-security,Java,Android,Firebase,Firebase Security,如何将用户信息记录到数据库中,并在注册期间启用用户写入数据库的权限 service cloud.firestore { match /databases/{database}/documents { match /Users/{userId} { // Anybody can write to their ouser doc allow read, write: if request.auth.uid == userId; } } } 我无法使用这些限制注册用户,如何设置好
service cloud.firestore {
match /databases/{database}/documents {
match /Users/{userId} {
// Anybody can write to their ouser doc
allow read, write: if request.auth.uid == userId;
}
}
}
我无法使用这些限制注册用户,如何设置好限制以在确认电子邮件后启用日志信息
register.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (imageUri != null) {
username_ = username.getText().toString();
name_ = name.getText().toString();
email_ = email.getText().toString();
pass_ = password.getText().toString();
location_ = location.getText().toString();
mDialog.show();
if (TextUtils.isEmpty(username_)) {
AnimationUtil.shakeView(username, RegisterActivity.this);
mDialog.dismiss();
}
if (TextUtils.isEmpty(name_)) {
AnimationUtil.shakeView(name, RegisterActivity.this);
mDialog.dismiss();
}
if (TextUtils.isEmpty(email_)) {
AnimationUtil.shakeView(email, RegisterActivity.this);
mDialog.dismiss();
}
if (TextUtils.isEmpty(pass_)) {
AnimationUtil.shakeView(password, RegisterActivity.this);
mDialog.dismiss();
}
if (TextUtils.isEmpty(location_)) {
AnimationUtil.shakeView(location, RegisterActivity.this);
mDialog.dismiss();
}
if (!TextUtils.isEmpty(name_) || !TextUtils.isEmpty(email_) ||
!TextUtils.isEmpty(pass_) || !TextUtils.isEmpty(username_) || !TextUtils.isEmpty(location_)) {
firebaseFirestore.collection("Usernames")
.document(username_)
.get()
.addOnSuccessListener(new OnSuccessListener < DocumentSnapshot > () {
@Override
public void onSuccess(DocumentSnapshot documentSnapshot) {
if (!documentSnapshot.exists()) {
registerUser();
} else {
Toast.makeText(RegisterActivity.this, "Username already exists", Toast.LENGTH_SHORT).show();
AnimationUtil.shakeView(username, RegisterActivity.this);
mDialog.dismiss();
}
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.e("Error", e.getMessage());
}
});
} else {
AnimationUtil.shakeView(username, RegisterActivity.this);
AnimationUtil.shakeView(name, RegisterActivity.this);
AnimationUtil.shakeView(email, RegisterActivity.this);
AnimationUtil.shakeView(password, RegisterActivity.this);
AnimationUtil.shakeView(location, RegisterActivity.this);
mDialog.dismiss();
}
} else {
AnimationUtil.shakeView(profile_image, RegisterActivity.this);
Toast.makeText(RegisterActivity.this, "We recommend you to set a profile picture", Toast.LENGTH_SHORT).show();
mDialog.dismiss();
}
}
});
}
要解决此问题,请使用以下代码行:
service cloud.firestore {
match /databases/{database}/documents {
match /Users/{userId} {
allow read, update, delete: if request.auth.uid == userId;
allow create: if request.auth.uid != null;
}
}
}
这基本上意味着,如果request.auth.uid!=空
并且只有在request.auth.uid==userId
时才能读取、更新和删除
编辑:
您正在收到“权限被拒绝”警告,因为在尝试写入之前:
firebaseFirestore.collection("Users").document(userUid).set(userMap)
您还试图将数据写入:
firebaseFirestore.collection("Usernames").document(username_).set(usernameMap)
你没有许可的地方。请向第一次写入操作添加相应的权限,一切都会正常。注册时,收到此警告E/错误:权限\u被拒绝:权限缺失或不足。V/FA:不活动,从服务断开连接注册人:实时数据库正常注册人:cloud firestory未成功!在这种情况下,请添加用于将用户添加到数据库的代码以及数据库架构的屏幕截图。我已将照片添加到问题中,是否可以将其添加到评论中?不客气。关于验证部分,你应该发布另一个新问题,这样知道答案的人可以帮助你。好吧,如果我不能处理这个问题,我会发布一个新问题,非常感谢
service cloud.firestore {
match /databases/{database}/documents {
match /Users/{userId} {
allow read, update, delete: if request.auth.uid == userId;
allow create: if request.auth.uid != null;
}
}
}
firebaseFirestore.collection("Users").document(userUid).set(userMap)
firebaseFirestore.collection("Usernames").document(username_).set(usernameMap)