Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript firebase.auth().createCustomToken在web应用程序上未定义_Javascript_Firebase_Firebase Authentication - Fatal编程技术网

Javascript firebase.auth().createCustomToken在web应用程序上未定义

Javascript firebase.auth().createCustomToken在web应用程序上未定义,javascript,firebase,firebase-authentication,Javascript,Firebase,Firebase Authentication,我正在尝试为使用Firebase的web应用程序创建一个“记住我”功能 我的目标是,当用户单击“记住我”并成功登录时,他们的身份验证令牌将使用localStorage存储,并在下次访问时自动登录(为了安全起见,我更喜欢将其原始凭据存储在localStorage中) 然而,当我试图调用firebase.auth().createCustomToken时,我得到一个错误,说它不存在。这是firebase的错误方法还是错误的函数调用?谢谢 以下是我的代码示例: var customToken = fi

我正在尝试为使用Firebase的web应用程序创建一个“记住我”功能

我的目标是,当用户单击“记住我”并成功登录时,他们的身份验证令牌将使用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() {
仅在服务器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...
  });
这也适用于其他身份验证方法;就用吧。稍后,如果您有一个令牌(仍在客户端上),并且您希望使用它进行身份验证,只需执行您当前正在执行的操作:


上述代码不起作用,因为
signInWithCustomToken
仅适用于服务器使用
createCustomToken
铸造的令牌。我不知道如何使用电子邮件/密码令牌进行身份验证。

创建自定义令牌需要访问Firebase项目的私钥/服务帐户。该密钥是访问Firebase项目的主密钥,因为它提供了无限的访问权限

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


使用自定义令牌对客户端进行身份验证,并(安全地)将其传递给客户端。然后使用
登录WithCustomToken
。这样,只有您的应用服务器才需要知道服务帐户/私钥。

请显示您的代码。当我们可以看到您尝试过的内容时,调试就容易多了。谢谢您,但这实际上是旧文档,不幸的是,这段代码很少适用于Firebase 3.0及以上版本(我正在使用)。哦,好的,对不起。这就是你想要做的吗?@LiorHirschfeld为Firebase 3.x编辑谢谢,我想这可能已经修复了获取分配给用户的自定义令牌的错误,但我仍然无法使用它登录,因为当我使用上面的确切代码时,我得到了错误“自定义令牌格式不正确”。知道问题出在哪里吗?(我很确定令牌分配到本地存储的工作正常,因为当我尝试登录令牌时,我会得到一个看似随机的字符串)。我想我知道问题出在哪里,但在发布之前,您是否使用Firebase的电子邮件/密码验证?谢谢。您知道使用getToken()方法登录吗?这正是我最初的目标?我的最终目标是允许用户在不本地存储用户名和密码的情况下再次登录-有更好的方法吗?当用户登录时,会自动存储用户的当前令牌,并在重新访问时恢复。听起来您缺少一个
onAuthStateChanged
处理程序:谢谢,但我在加载页面后尝试运行行“var user=firebase.auth().currentUser”,结果总是没有用户登录,即使在刷新页面之前有用户登录。你知道为什么当前令牌没有被还原吗?这就是为什么我说的是
onAuthStateChanged
而不是
currentUser
;-)Firebase混合使用短期访问令牌和长期ID令牌。很可能需要刷新访问令牌。
var token = localStorage.getItem("savedToken"); // get stored token
firebase.auth().signInWithCustomToken(token).catch(function(error) {
  // handle error...
});