Xamarin C# - FireBase,使用访问令牌验证REST请求

时间:2017-11-19 02:06:04

标签: c# firebase authentication xamarin access-token

我正在尝试使用Firebase ID令牌访问Firebase数据库。根据Firebase基础文档,“当用户或设备使用Firebase身份验证登录时,Firebase会创建一个唯一标识它们的相应ID令牌,并授予他们访问多个资源的权限,例如实时数据库。您可以重复使用用于对Realtime Database REST API进行身份验证并代表该用户发出请求的ID令牌。

如何在用户使用电子邮件和密码登录后获取ID令牌?所以我可以把它传递给https://<DATABASE_NAME>.firebaseio.com/users/ada/name.json?auth=<ID_TOKEN>

1 个答案:

答案 0 :(得分:1)

您可以使用C #await任务包装器而不是Java侦听器:

C#异步/等待风格:

var tokenResult = await FirebaseAuth.GetInstance(fireApp).CurrentUser.GetTokenAsync(true);
Log.Debug(App.TAG, tokenResult.Token);

Android / Java侦听器样式:

FirebaseAuth.GetInstance(fireApp)
            .CurrentUser
            .GetToken(true)
            .AddOnCompleteListener(this, new GmsTaskCompletion((sender, e) => 
{
    var task = (e as GmsTaskCompletion.GmsTaskEvent).task;
    if (task.IsSuccessful)
    {
        var tokenResult = task.Result as GetTokenResult;
        Log.Debug(App.TAG, tokenResult.Token);
    }
}));

使用此IOnCompleteListener实施:

public class GmsTaskCompletion : Java.Lang.Object, IOnCompleteListener
{
    public class GmsTaskEvent : EventArgs
    {
        public readonly Android.Gms.Tasks.Task task;
        public GmsTaskEvent(Android.Gms.Tasks.Task task) => this.task = task;
    }

    readonly EventHandler handler;
    public GmsTaskCompletion(EventHandler handler) => this.handler = handler;
    public void OnComplete(Android.Gms.Tasks.Task task)
    {
        if (handler != null)
            handler.Invoke(this, new GmsTaskEvent(task));
    }
}