我想使用Firebase来检测用户是否已登录:
var auth = new FirebaseSimpleLogin(Ref, function(err, user){
if(err){
console.log(err);
}else if(user){
console.log("User ID:" + user.id + ", Email: " + user.email);
}else if(user == nil){
console.log("No user logged in");
}else{
login();
}
});
但它给了我这个错误:
未定义
当用户未登录时。是否有任何解释以及如何解决?
答案 0 :(得分:12)
您需要使用getAuth()方法并执行以下操作:
var user = ref.getAuth();
Firebase将返回一个对象,然后您可以执行以下操作以查看用户是否已登录登录:
if (user==null) {
//user not logged in
};
答案 1 :(得分:2)
JavaScript中没有nil
个关键字,但有null
和undefined
。从Firebase Simple Login documentation:
var auth = new FirebaseSimpleLogin(ref, 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
}
});
答案 2 :(得分:1)
对于 Swift 试试这个,
let FIREBASE_REF = Firebase(url: "FirebaseURL")
if let _ = FIREBASE_REF.authData{
//Use logged in
}else{
//Use not logged in
}
答案 3 :(得分:0)
当您实例化新的FirebaseSimpleLogin对象时,它可能包含“user”属性。
如果定义了此属性,则它应包含用户信息,因此指示用户的登录状态。
在用户登录之前,user属性为null。
以下示例显示了一个简单的函数,如果用户已登录则返回布尔值true,否则返回false。
var ref = new Firebase('https://YOUR-FIREBASE-URL.firebaseio.com/');
var auth = new FirebaseSimpleLogin(ref, function(error, user) {
if (error) {
// Handle error
}
else if (user) {
// Do something with logged in user information
}
});
function loggedIn() {
return auth.user !== null;
};
如您所见,如果定义了auth.user,则只调用loggedIn()将返回true。
如果要检查是否没有用户登录,可以创建与上述相反的功能。像这样。
function noUserloggedIn() {
return auth.user == null;
};
如果未定义auth.user,则上述函数将返回true,即auth.user == null,表示没有任何已登录的用户。
为了完整性,并且如其他评论/答案中所述,您需要替换
nil
与
null
由于javascript中不存在nil关键字。
更新的代码 - 我刚刚更新了我的代码以反映David的评论,构造函数确实需要回调,我的原始代码是使用$ firebaseAuth从angularFire转换而来的,它将ref作为参数并且我相信了一个承诺。它不需要回调,因此我将其删除:),但是每次用户身份验证状态发生变化时都会触发此回调。
来自github docs:
要初始化简单登录,我们需要创建一个FirebaseSimpleLogin对象。此对象包含Firebase引用和回调函数。只要用户的身份验证状态发生更改,就会触发回调。
来源:https://github.com/firebase/firebase-simple-login/tree/master/docs/v1/
但是现在已经弃用了上述内容,因为Firebase登录现在与FireBase核心捆绑在一起。查看https://www.firebase.com/docs/web/api/firebasesimplelogin/了解详情。
自从这个答案以来,Firebase也取得了很大进展。我建议在这里查看新的API https://www.firebase.com/docs/
答案 4 :(得分:0)
这也应该有用。
signedIn: function(){
return !!Auth.user.provider;
}