【发布时间】:2021-05-25 03:17:52
【问题描述】:
我正在使用电子邮件/密码登录方法注册用户。所以成功注册登录后,我无法在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 -> 身份验证 -> 用户相同的 UID。
【问题讨论】:
-
您是否忘记包含产生错误的实际 C# 代码?
-
@FrankvanPuffelen 感谢您的回复。我刚刚添加了 C# 代码。你可以去看看!谢谢
-
你怎么知道有一个当前登录的用户(这是你的规则正在检查的)?
-
另外请注意,我怀疑
Firebase.Child("Appointments").OnceAsync<Appointment>()).Where(a => a.Object.UID == userId)在服务器端执行条件,所以我建议也在这里查看查询:firebase.google.com/docs/database/unity/… -
@FrankvanPuffelen 我可以通过给出以下代码行来检查用户是否已登录:
FirebaseAuth auth = FirebaseAuth.Instance; var userId = auth.Uid;成功登录后,我可以在控制台中看到与在 Firebase 中完全相同的 UID -> 身份验证 -> 用户。
标签: c# firebase-realtime-database xamarin.forms firebase-security