以下是我正在玩的示例代码:
var myRootRef = new Firebase('https://url.firebaseIO.com/');
var authClient = new FirebaseAuthClient(myRootRef, 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!');
login();
}
});
function login(){
var email = "something@gmail.com";
var password = "123";
authClient.login('password', {
email: email,
password: password,
rememberMe: true
});
}
我得到的错误是:无法调用未定义的方法'login'
authClient似乎总是为空?我做错了什么?
答案 0 :(得分:2)
此处 authClient 似乎很好。我认为login()函数的范围有问题。试试这个
var myRootRef = new Firebase('https://url.firebaseIO.com/');
var authClient = new FirebaseAuthClient(myRootRef, 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!');
var email = "something@gmail.com";
var password = "123";
this.login('password', {
email: email,
password: password,
rememberMe: true
});
}
});
答案 1 :(得分:1)
当您最初调用new FirebaseAuthClient
时,它将使用当前登录状态调用回调(例如,当调用此用户时,用户可能已经登录)。此回调发生在new FirebaseAuthClient
返回之前,这意味着尚未分配authClient
。
您无需在回调中移动authClient.login
,但这样可以正常工作。您只需要知道第一次发出此回调可能在分配之前。
setTimeout
来确保首先设置变量:
var authClient = new FirebaseAuthClient(myRootRef, 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('not logged in yet or logged out again!');
setTimeout(login, 1);
}
});