我正在尝试为使用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() {
答案 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 client与signInWithCustomToken
。这样,只有您的应用服务器必须知道服务帐户/私钥。