Flutter 中的 Firebase 实时数据库规则错误。如何获取它们
Firebase Realtime Database rules error in flutter. How to fetch them
我目前正在尝试让用户在我的 flutter 应用程序中输入用户名。我目前在 firebase 上有这些规则,它只允许添加唯一的用户名。
我的问题是,当我尝试通过按下按钮时调用下面的方法将用户名添加到数据库时,我无法获取错误。
我正在使用 Firebase 实时数据库。
这是我添加用户名的代码:
Future<User?> addUsernameToDatabase(String? username) async {
final user = FirebaseAuth.instance.currentUser;
if(user != null)
{
//GuestUser
if(user.isAnonymous)
{
print("Guest user");
final uid = user.uid;
user.updateDisplayName(username);
await _dbRef.child('usernames').child(user.displayName!).set(uid);
}else{
final uid = user.uid;
setLoading(true);
try{
user.updateDisplayName(username);
await _dbRef.child('usernames').child(username!).set(uid);
setLoading(false);
} on PlatformException catch (error){
print(error.toString());
setLoading(false);
} on DatabaseError catch (error){
print(error.toString());
setLoading(false);
} on Exception catch (error){
print(error.toString());
setLoading(false);
}
}
}
}
以下是 Firebase 的规则。顺便说一句,如果用户输入用户名并且已经退出,它们将不会添加。
{
"rules": {
".read": true,
".write": true,
"users":{
"$uid": {
".write": "auth !== null && auth.uid === $uid",
".read": "auth !== null && auth.provider === 'password'",
"username": {
".validate": "
!root.child('usernames').child(newData.val()).exists() ||
root.child('usernames').child(newData.val()).val() == $uid"
}
}
}
}
}
firebase 实时数据库中的数据也是这样的
https://i.stack.imgur.com/5gKuZ.png
您的规则没有定义 /usernames
的访问权限,因此尝试从您的应用中读取或写入 _dbRef.child('usernames')
将失败。
通过阅读您的代码,这些是您要添加的规则:
{
"rules": {
...
"usernames": {
"$username": {
".write": "!data.exists() && newData.val() === auth.uid"
}
}
}
}
我目前正在尝试让用户在我的 flutter 应用程序中输入用户名。我目前在 firebase 上有这些规则,它只允许添加唯一的用户名。 我的问题是,当我尝试通过按下按钮时调用下面的方法将用户名添加到数据库时,我无法获取错误。 我正在使用 Firebase 实时数据库。 这是我添加用户名的代码:
Future<User?> addUsernameToDatabase(String? username) async {
final user = FirebaseAuth.instance.currentUser;
if(user != null)
{
//GuestUser
if(user.isAnonymous)
{
print("Guest user");
final uid = user.uid;
user.updateDisplayName(username);
await _dbRef.child('usernames').child(user.displayName!).set(uid);
}else{
final uid = user.uid;
setLoading(true);
try{
user.updateDisplayName(username);
await _dbRef.child('usernames').child(username!).set(uid);
setLoading(false);
} on PlatformException catch (error){
print(error.toString());
setLoading(false);
} on DatabaseError catch (error){
print(error.toString());
setLoading(false);
} on Exception catch (error){
print(error.toString());
setLoading(false);
}
}
}
}
以下是 Firebase 的规则。顺便说一句,如果用户输入用户名并且已经退出,它们将不会添加。
{
"rules": {
".read": true,
".write": true,
"users":{
"$uid": {
".write": "auth !== null && auth.uid === $uid",
".read": "auth !== null && auth.provider === 'password'",
"username": {
".validate": "
!root.child('usernames').child(newData.val()).exists() ||
root.child('usernames').child(newData.val()).val() == $uid"
}
}
}
}
}
firebase 实时数据库中的数据也是这样的 https://i.stack.imgur.com/5gKuZ.png
您的规则没有定义 /usernames
的访问权限,因此尝试从您的应用中读取或写入 _dbRef.child('usernames')
将失败。
通过阅读您的代码,这些是您要添加的规则:
{
"rules": {
...
"usernames": {
"$username": {
".write": "!data.exists() && newData.val() === auth.uid"
}
}
}
}