首页 > 解决方案 > Firebase 实时数据库规则被拒绝权限

问题描述

我正在使用电子邮件/密码登录方法注册用户。所以在成功注册并登录后,我无法在 Firebase Real Time 中读写我的数据。

我是 Firebase 的新手,所以我无法真正弄清楚主要问题是什么或我错过了哪些步骤。

这条规则显然工作正常:

{
       "rules": {
              ".read": "auth == null",
              ".write": "auth == null"
        }
   }

但是,此规则不起作用,尽管我的用户已经注册并获得了 UID。

{
       "rules": {
              ".read": "auth != null",
              ".write": "auth != null"
        }
   }

它总是显示以下错误:

Exception occured while processing the request.
Url: https://App-Name-6ssd2.firebaseio.com/Appointments/-MUAG-CHWBFSv-Vrtsoc/.json?print=silent

Response: {
  "error" : "Permission denied"
}

我目前想要的是允许任何注册用户读/写每个人的信息,但它总是拒绝许可。

截图:

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

我获取 Firebase 数据的实现。错误也指向this方法。

  public async Task<List<Appointment>> GetUserAppointment(string userId)
        {
            var appointments = (await Firebase.Child("Appointments")
              .OnceAsync<Appointment>()).Where(a => a.Object.UID == userId).Select(item =>
              new Appointment
              {
                  UID = item.Object.UID,
                  AppointmentID = item.Object.AppointmentID,
                  Title = item.Object.Title,
                  Date = item.Object.Date,
                  Time = item.Object.Time,
                  Status = item.Object.Status,
                  ReasonText = item.Object.ReasonText

              }).ToList();
            return appointments;

我第一次执行用户 SinUp 时。

 public async Task<string> SignUpWithEmailAndPassword(string email, string password)
        {
            try
            {
                var signUpTask = await auth.CreateUserWithEmailAndPasswordAsync(email, password);
                var user = signUpTask.User;
                var token = await auth.CurrentUser.GetIdToken(false).AsAsync<GetTokenResult>();

                await SendEmailVerification();

                return token.Token;
            }
            catch (FirebaseAuthInvalidUserException e)
            {
                e.PrintStackTrace();
                return string.Empty;

            }
            catch (FirebaseAuthInvalidCredentialsException e)
            {
                e.PrintStackTrace();
                return string.Empty;

            }
            catch (FirebaseAuthUserCollisionException existEmail)
            {
                existEmail.PrintStackTrace();
                return string.Empty;
            }
        }

为了检查用户是否经过身份验证/验证,我进行了调试,结果...我可以在控制台中看到与 Firebase -> Authentication -> Users 中相同的 UID。

这是屏幕截图。 在此处输入图像描述

调试GetUserAppointment(string userID)检查当前用户是否设置。 在此处输入图像描述

标签: c#firebase-realtime-databasexamarin.formsfirebase-security

解决方案


这是因为您无权访问数据库,请检查实时数据库中的规则选项卡。

  1. 打开firebase,选择左侧的数据库。

  2. 现在在右侧,从下拉列表中选择实时数据库并更改规则以允许任何人编写数据库

    {
    
     "rules": {
    ".read": true,
    ".write": true
    }
    }
    

你的规则是:

{
 "rules": {
".read": "auth != null",
".write":"auth != null"
 }
 }

这意味着只有授权用户才能写入和读取数据。


推荐阅读