问题描述
如果我为 ".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 (将#修改为@)