检查用户是否已登录时未定义nil

时间:2014-02-20 09:51:34

标签: javascript firebase

我想使用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();
        }
      });

但它给了我这个错误:

  

未定义

当用户未登录时。是否有任何解释以及如何解决?

5 个答案:

答案 0 :(得分:12)

您需要使用getAuth()方法并执行以下操作:

  var user = ref.getAuth();

Firebase将返回一个对象,然后您可以执行以下操作以查看用户是否已登录登录:

  if (user==null) {
      //user not logged in
  }; 

答案 1 :(得分:2)

JavaScript中没有nil个关键字,但有nullundefined。从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;
}