Firebase:使用REST API和Firebases隐藏的Auth URL

时间:2016-05-05 23:34:49

标签: rest unity3d firebase firebase-authentication

在过去3年中,我们仅将Fire / Js用于Firebase,但现在我们也在使用Unity。

目前的Unity / Firebase在部署时仅适用于Android / iOS,我们99%的工作都在Windows商店中。

我实际上有一个相当不错的Unity / Firebase代码库,但它要求我使用完整的App Secret。

所有其他库都公开了一种使用电子邮件/密码登录的方法,但REST API仅允许使用令牌或您的应用程序机密,然后指出它不建议放入您的客户端;我想,如果你使用的是另一个库,那么你将拥有自己的auth / user方法,我们不会...

现在,我拆开了网络版本并得到了这个:

https://auth.firebase.com/v2/<myfirebase>/auth/password?&email=dennis%40<mysite>&password=<mypassword>v=js-2.2.9&transport=json&suppress_status_codes=true

所以有一个端点,我可以发送东西,我已经在团结内测试它,结果很好。

显然网址不能保证工作,但我想知道是否有任何理由不使用它?

另外,为什么不在官方REST API中公开此端点?

1 个答案:

答案 0 :(得分:0)

据我了解,该网址将继续适用于您的旧版Firebase项目。如果要更新到新的Firebase 3.0 API,则必须执行相同类型的逆向工程。但是,如果您仍在使用旧版Firebase项目,我建议您查看this。它尚未更新以与Firebase 3.0一起使用 - 因此我需要执行类似于允许登录新API的操作。

我能够使用C#按照以下方式使用新API执行此操作(其中FirebaseManager是我为全局变量编写的Singleton以及用于写入和读取数据库的函数:

Hashtable loginData = new Hashtable();
loginData.Add ("email", <EMAIL-GOES-HERE>);
loginData.Add ("password", <PASSWORD-GOES-HERE>);
loginData.Add ("returnSecureToken", true);
UnityHTTP.Request loginRequest = new UnityHTTP.Request ("post", 
    "https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key="
    + <YOUR-PROJECT-API-KEY-GOES-HERE>, loginData);

loginRequest.Send ((request) => {
    Hashtable jsonResponse = (Hashtable)JSON.JsonDecode(request.response.Text);
    if (jsonResponse == null) {
        DisplayErrorMessage("Error logging in. Server returned null or malformed response");
    }
    FirebaseManager.Instance.idToken = (string)jsonResponse["idToken"]; // This is your auth token
    FirebaseManager.Instance.uid = (string)jsonResponse["localId"]; // this is your "uid"
});

// I have a list of users in my db keyed by the "uid" -- I access them like this

UnityHTTP.Request fullnameRequest = new UnityHTTP.Request ("get",
    <YOUR-DATABASE-ROOT-URL-HERE>
    + "/users/" + FirebaseManager.Instance.uid + ".json?auth=" + FirebaseManager.Instance.idToken);

fullnameRequest.Send ((request) => {
    Debug.Log(request.response.Text);
    Hashtable jsonResponse = (Hashtable)JSON.JsonDecode(request.response.Text);
    if (jsonResponse == null) {
        DisplayErrorMessage("Error getting user info. Server returned null or malformed response");
    }
    FirebaseManager.Instance.fullname = (string)jsonResponse["fullname"];
    FirebaseManager.Instance.groupId = (string)jsonResponse["group"]; // just storing this in memory
});

所以我不认为使用网址有任何损害,只需确保在事情发生变化时预算更多工作时间。