【发布时间】: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://<PROJECT_ID>.firebaseio.com/testing/flatString.json?auth=<ID_TOKEN>
【问题讨论】:
-
那么你成功获取了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