firebase.auth()。在Web应用程序上未定义createCustomToken

时间:2016-08-29 01:12:13

标签: javascript firebase firebase-authentication

我正在尝试为使用Firebase的网络应用创建“记住我”功能。

我的目标是当用户点击“记住我”并成功登录时,他们的身份验证令牌会使用localStorage存储,并且他们会在下次访问时自动登录(我更喜欢将其原始凭据存储在localStorage中以确保安全性目的)。

然而,当我试图致电firebase.auth().createCustomToken时,我收到一条错误消息,说它不存在。这是错误的方法还是错误的函数调用firebase?谢谢!

以下是我的代码示例:

var customToken = firebase.auth().createCustomToken(user.uid);
localStorage.setItem("savedToken", customToken);

然后我打算用这一行重新登录:

firebase.auth().signInWithCustomToken(localStorage.getItem("savedToken")).then(function() {

2 个答案:

答案 0 :(得分:5)

firebase.auth().createCustomToken仅在服务器API中可用。

使用电子邮件进行身份验证&密码并获取会话的令牌,试试这个:

firebase.auth().signInWithEmailAndPassword(email, password)
  .then(function(user) {
    user.getToken().then(function(token) {
      localStorage.setItem("savedToken", token); // store the token
    });
  })
  .catch(function(error) {
    // handle error...
  });

这也适用于其他身份验证方法;只需使用User.getToken。稍后,如果您有一个令牌(仍然在客户端上),并且您想要使用它进行身份验证,只需执行您当前正在执行的操作:

var token = localStorage.getItem("savedToken"); // get stored token
firebase.auth().signInWithCustomToken(token).catch(function(error) {
  // handle error...
});

上述代码无效,因为signInWithCustomToken仅适用于服务器使用createCustomToken创建的令牌。我不确定如何使用电子邮件/密码令牌进行身份验证。

答案 1 :(得分:1)

创建自定义令牌需要访问Firebase项目的私钥/服务帐户。此密钥是获取对Firebase项目的访问权限的主密钥,知道它可以无限制地访问。

由于知道私钥的人可以无限制地访问Firebase项目,因此在客户端上永远薄荷自定义令牌是没有意义的。您可以简单地从Firebase数据库和存储服务中删除所有安全性。

使用自定义令牌mint a custom token on an app server对客户端进行身份验证,并将其(安全地)传递给客户端。然后use the custom on the clientsignInWithCustomToken。这样,只有您的应用服务器必须知道服务帐户/私钥。