【问题标题】:Firebase REST API - authenticating request with id token doesn't workFirebase REST API - 使用 id 令牌验证请求不起作用
【发布时间】:2019-10-30 08:19:07
【问题描述】:

我正在开发一个 Unity C# 项目,并尝试使用用户登录后 Firebase 返回的 id 令牌验证对实时数据库的请求,但它表示该请求未经授权。这是我的登录代码(AuthResponse 包含响应正文):

WWWForm form = new WWWForm();
form.AddField("email", email);
form.AddField("password", password);

using (UnityWebRequest www = UnityWebRequest.Post("https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key=" + API_KEY, form))
{
    yield return www.SendWebRequest();

    if (www.isNetworkError || www.isHttpError)
    {
        Debug.Log($"Login failed: {www.error}");
        callback(false);
    }
    else
    {
        AuthResponse data = www.downloadHandler.text.FromJson<AuthResponse>();
        ID_TOKEN = data.idToken;
    }
}

还有我的阅读请求:

string url = $"{DATABASE_URL}{path}.json";
if (auth) url += $"?auth={ID_TOKEN}";
using (UnityWebRequest www = UnityWebRequest.Get(url))
{
    yield return www.SendWebRequest();

    if (www.isNetworkError || www.isHttpError)
    {
        Debug.Log($"Read failed: {www.error}");
    }
}

我的数据库有公共规则,并且在没有auth 参数的情况下一切正常。我错过了什么?

编辑:这是令牌响应:

{
  "kind": "identitytoolkit#SignInWithPasswordResponse",
  "localId": <LOCAL_ID>,
  "email": <EMAIL>,
  "displayName": "",
  "idToken": <ID_TOKEN>,
  "registered": true
}

这是完整的读取请求网址:https://&lt;PROJECT_ID&gt;.firebaseio.com/testing/flatString.json?auth=&lt;ID_TOKEN&gt;

【问题讨论】:

  • 那么你成功获取了id token,读取请求失败了?
  • @crysxd 好像是这样。我已经打印出 id 令牌,它看起来没有任何问题。它似乎也没有过期(expiresIn 为空)。
  • 我发起了一个匿名登录的请求,我躺在那里得到了this response。它应该与您的非常相似。你能比较一下吗?将令牌添加到数据库 URL 就可以了。您能否发布您请求的 URL 和令牌响应的更完整示例?其中一个可能是原因
  • @crysxd 更新了令牌响应和请求 url
  • 我认为公共规则用于带有 pub/sub 的客户端。将规则标记为读/写:false 或任何您想要的 pub/sub。如果您想与 API 一起使用,请照常发送令牌,然后在 firebase 服务器中手动验证它。

标签: c# firebase firebase-realtime-database firebase-authentication


【解决方案1】:

使用 Firebase Unity SDK 代替自己的 httppost

在使用 Firebase 身份验证之前,您需要:

注册您的 Unity 项目并将其配置为使用 Firebase。

如果您的 Unity 项目已经使用 Firebase,则它已经为 Firebase 注册和配置。

如果您没有 Unity 项目,可以下载示例应用。

将 Firebase Unity SDK(特别是 FirebaseAuth.unitypackage)添加到您的 Unity 项目中。

【讨论】:

  • 感谢您的回答,但我有意使用 REST API 而不是 SDK,因为我想为桌面构建。
猜你喜欢
  • 2018-05-02
  • 2018-12-16
  • 1970-01-01
  • 2018-07-23
  • 2021-02-18
  • 2019-06-28
  • 2018-07-04
  • 2021-09-04
  • 2017-01-24
相关资源
最近更新 更多