簡體   English   中英

檢查用戶是否已登錄時未定義nil

[英]nil is not defined while checking if user is logged in

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

但它給了我這個錯誤:

nil沒有定義

當用戶沒有登錄時。任何解釋以及如何解決這個問題?

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

  var user = ref.getAuth();

Firebase將返回一個對象,然后您可以執行以下操作以查看用戶是否已登錄登錄:

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

JavaScript中沒有nil關鍵字,但有nullundefined Firebase簡單登錄文檔中嘗試這種方法:

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
  }
});

對於Swift試試這個,

let FIREBASE_REF = Firebase(url: "FirebaseURL")

    if let _ = FIREBASE_REF.authData{
      //Use logged in
    }else{
     //Use not logged in
    }

實例化新的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文檔:

要初始化簡單登錄,我們需要創建一個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/

這也應該有效。

signedIn: function(){
  return !!Auth.user.provider;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM