Я работаю над проектом Unity C # и пытаюсь аутентифицировать запрос к базе данных реального времени, используя маркер идентификатора, который Firebase возвращает после входа пользователя, но он говорит, что запрос не авторизован. Вот мой код входа в систему (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
}
Это полный URL-адрес запроса на чтение: https://<PROJECT_ID>.firebaseio.com/testing/flatString.json?auth=<ID_TOKEN>