1

我正在尝试使用 Firebase 通过电子邮件/密码注册来构建一个带有用户身份验证的基本 Web 应用程序。

我现在的设置包括一个 main.js 文件,该文件包含以下内容:

var dbRef = new Firebase('https://url.firebaseIO.com');
var authClient = new FirebaseAuthClient(dbRef, function(error, user) {
  if (error) {
    // an error occurred while attempting login
    console.log(error);
  } else if (user) {
    // user authenticated with Firebase
    console.log('User ID: ' + user.id + ', Provider: ' + user.provider);
  } else {
    // user is logged out
    console.log('logged out!');
  }
});
function next(){
   window.location = 'index.html';
}
function test(){
     authClient.login('password', {
     email: email,
     password: password,
     rememberMe: true
    },next());
    // window.location = 'index.html';
}

我从表单和登录中获取电子邮件/密码值。这样可行。但是,一旦我包含一个回调函数,然后将它们重定向到一个新的经过身份验证的页面,它就不再起作用了。事实上,大多数时候我都会收到“未知错误”响应。

当我进入下一页时,我不再登录。如果我删除 next() 函数并留在同一页面上,它可以工作 - 即使我随后从控制台触发下一个函数。您应该以不同的方式进入另一个页面吗?

我很确定存在某种通信问题(可能在页面切换之前登录没有得到返回?)因为如果我在下一个函数之前添加 1s 超时,它就会起作用。但这肯定不是最佳实践吗?

谢谢!

4

1 回答 1

2

根据https://www.firebase.com/docs/security/simple-login-email-password.html,该authClient.login()方法实际上并不接受回调,因此您看到的问题很可能是远离如您所建议的,在返回回调之前的当前页面。

我建议在身份验证客户端实例化期间传递的回调中进行重定向。( new FirebaseAuthClient(ref, callback)) 并在检测到登录用户时重定向。此回调将在用户当前的身份验证状态实例化时调用一次,然后在用户的身份验证状态更改时(例如登录或注销)再次调用。

于 2013-05-03T23:27:34.563 回答