我的第一篇文章在这里。我已经在这里解释了我的问题和我期望的输出。白光宇爵士- MSFT评论了我的帖子,你可以查看我的帖子并滚动他的回答。我把他的回答应用到我的准则中。链接:https://stackoverflow.com/questions/74587990/insert-data-to-firebase-and-set-restriction-to-uiusername-and-password-in-xama/74596335?noredirect=1#comment131744947_74596335
这就是如何应用他的代码。My Username FIeld in UI
<Entry
Placeholder="Username"
TextColor="Black"
HorizontalOptions="FillAndExpand"
Margin="0,0,15,0"
PlaceholderColor="Black"
x:Name="entryField_Username"
TextChanged="entryField_Username_TextChanged"/>
'textchanged.
下面的代码
async private void entryField_Username_TextChanged(object sender, TextChangedEventArgs e)
{
var oldText = e.OldTextValue;
var newText = e.NewTextValue;
// var newText = entryField_Username.Text;
CUSTOMER customer = new CUSTOMER();
// var person = await firebaseHelper.GetPerson(Convert.ToString(EntryText.Text);
var customerName = await customerRepo.GetCustomer(Convert.ToString(entryField_Username.Text));
//if (oldText != string.Empty)
//{
// if(await customerRepo.GetCustomer(Convert.ToString(entryField_Username.Text))
// {
// }
//}
if (customerName != null)
{
entryField_Username.Text = customer.CusFirstName;
// this is a Toast method
// await this.DependencyService.Get<Toast>().Show("Username Already Exist!");
await this.DisplayToastAsync("Username already exist.", 1500);
}
else
{
}
}
在我的customerRepository文件中,如果代码或函数是.
public async Task<List<CUSTOMER>> GetAllCustomer()
{
return (await firebaseClient
.Child("CUSTOMER")
.OnceAsync<CUSTOMER>()).Select(item => new CUSTOMER
{
CusFirstName = item.Object.CusFirstName,
CusID = item.Object.CusID
}).ToList();
}
public async Task<CUSTOMER> GetCustomer(string customerName)
{
// var data = await firebaseClient.Child(nameof(Customer)).PostAsync(JsonConvert.SerializeObject(customer));
//if (!string.IsNullOrEmpty(data.Key))
//{
// return true;
//}
//return false;
var allCustomer = await GetAllCustomer();
await firebaseClient
.Child("CUSTOMER")
.OnceAsync<CUSTOMER>();
return allCustomer.Where(a => a.CusFirstName == customerName).FirstOrDefault();
// var allCustomer = await firebaseClient.Child(nameof("Customer")).OnceAsync<Customer>
}
同样在那个customerRepository文件中,我用我的实时数据库的链接设置了我的firebase客户机。
现在,我的流程是,当我输入用户名并点击"检查"在键盘上,就像我附上的图像。图片来自谷歌,我只是编辑它,但这是我在创建时所做的视觉效果。它将崩溃并出现ERROR。这就是错误:(
请帮助我掌握如何解决错误,实现我的问题。任何链接都将评论我的帖子,将不胜感激,谢谢。
编辑;基于用户对我的帖子的评论,所以我检查我的实时数据库,这是我们的规则'
{
"rules": {
"some_path": {
"$uid": {
// Allow only authenticated content owners access to their data
".read": "auth !== null && auth.uid === $uid",
".write": "auth !== null && auth.uid === $uid"
}
}
}
}
如果我们像那样设置规则,我们会得到这个错误…
Firebase.Database。处理请求时发生异常。Url: https ://***************************************************************/. json ?打印=沉默请求数据:{/*我注释掉了,但这部分就像我的表属性和它的数据*/}回应:{"error":"拒绝许可";}'
服务器端拒绝数据导致的问题。
由于Firebase服务器拒绝该操作而抛出此异常,因此可以通过更改Cloud Firestore安全规则中的规则来解决此问题。