如何解决如何编写将 Auth.DefaultInstance.CurrentUser UID 与 Firebase 身份验证中的 UID 进行比较的 Firebase 规则
如果我为 ".read": true
设置 Firebase 规则,我的应用可以正常运行。如果我只需要一个经过身份验证的用户(见下文),Firebase 会抛出异常“权限被拒绝”我做错了什么?任何帮助将不胜感激。
这是我的规则:
{
"rules": {
".read": "auth != null",".write": "auth != null"
}
}
LoginPage.xaml.cs
using pelletPirate.Interfaces;
using System;
using System.ComponentModel;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
using pelletPirate.Services;
namespace pelletPirate.Views
{
[XamlCompilation(XamlCompilationoptions.Compile)]
[DesignTimeVisible(true)]
public partial class LoginPage : ContentPage
{
FirebaseHelper firebaseHelper = new FirebaseHelper();
IAuth auth;
public LoginPage()
{
InitializeComponent();
auth = DependencyService.Get<IAuth>();
}
private async void BtnLogin_Clicked(object sender,EventArgs e)
{
Email.Text = "connor@connor.com";
Password.Text = "connor";
var token = await auth.LoginWithEmailPassword(Email.Text,Password.Text);
System.Diagnostics.Debug.WriteLine("Logged inToken is: " + token + "******** UID is: " + App.G_currentuser);
if (token != string.Empty)
{
Email.Text = null;
Password.Text = null;
var OwnerObject = await firebaseHelper.SetGlobalOwnersController(App.G_currentuser);
App.G_controller = OwnerObject.controller;
System.Diagnostics.Debug.WriteLine("Returned back to LoginPage Global Controller set to: [" + App.G_controller + "] <<--- controller should be in the brackets!");
await Shell.Current.GoToAsync("//loggedin");
}
else
{
await displayAlert("Authentication Failed","E-mail or password are incorrect. Try again!","OK");
}
}
}
}
AuthIOS.cs
using System;
using System.Threading.Tasks;
using Foundation;
using Firebase.Auth;
using pelletPirate.Interfaces;
using pelletPirate.iOS;
using Xamarin.Forms;
[assembly: Dependency(typeof(AuthIOS))]
namespace pelletPirate.iOS
{
class AuthIOS : IAuth
{
public async Task<string> LoginWithEmailPassword(string email,string password)
{
try
{
SignOut();
System.Diagnostics.Debug.WriteLine("In AuthIOS and BEFORE SignIn to Firebase (should be NULL) and Auth.DefaultInstance.CurrentUser is: [" + Auth.DefaultInstance.CurrentUser + "] << inside these brackets!");
var user = await Auth.DefaultInstance.SignInWithPasswordAsync(email,password);
App.G_currentuser = user.User.Uid;
System.Diagnostics.Debug.WriteLine("In AuthIOS AFTER SignIn and Auth.DefaultInstance.CurrentUser is: [" + Auth.DefaultInstance.CurrentUser + "] << inside these brackets!");
return await user.User.GetIdTokenAsync();
}
catch (Exception e)
{
System.Diagnostics.Debug.WriteLine("ERROR in login caught -->> " + e + " <<-- error diplay here");
return "";
}
}
public bool SignOut()
{
try
{
_ = Auth.DefaultInstance.SignOut(out NSError error);
return error == null;
}
catch (Exception e) { System.Diagnostics.Debug.WriteLine("AuthIOS SignOut Failed " + e); }
{
return false;
}
}
public bool IsSignedIn()
{
var user = Auth.DefaultInstance.CurrentUser;
return user != null;
}
}
}
FirebaseHelper.cs(服务)
using Firebase.Database;
using pelletPirate.Models;
using System.Linq;
using System.Threading.Tasks;
namespace pelletPirate.Services
{
public class FirebaseHelper
{
FirebaseClient firebase = new FirebaseClient("https://pelletpirate-auth-default-rtdb.firebaseio.com/");
public async Task<Owner> SetGlobalOwnersController(string userid) // used to get the Controller name and return it to be assigned to a global variable
{
return (await firebase.Child("owners").OnceAsync<Owner>()).Select(item => new Owner
{
userId = userid,controller = item.Object.controller,}).FirstOrDefault();
}
}
}
任何帮助或检查的想法将不胜感激。我整个星期都在为此苦苦挣扎,似乎无法取得突破。谢谢,布赖恩
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。