2014-04-14 63 views
2

教程:http://www.thinkster.io/angularjs/wBhtRLWHIR/6-authenticating-users-with-a-service火力簡單的登錄教程丟失的用戶

我下面這個教程,它好像我只要他們註冊失去我的用戶。

這裏是我的auth.js廠:

'use strict'; 

app.factory('Auth', function($firebaseSimpleLogin, FIREBASE_URL, $rootScope){ 

    var ref = new Firebase(FIREBASE_URL); 

    var auth = $firebaseSimpleLogin(ref); 

    var Auth = { 
     register : function(user) { 
      return auth.$createUser(user.email, user.password); 
     }, 
     signedIn : function() { 
      // PROBLEM: authUser is always null 
      console.log(auth.user); 
      return auth.user !== null; 
     }, 
     logout : function() { 
      auth.$logout(); 
     } 
    }; 

    $rootScope.signedIn = function() { 
     return Auth.signedIn(); 
    }; 

    return Auth; 
}); 

這裏是我的auth.js控制器:

'use strict'; 

app.controller('AuthCtrl', function($scope, $location, Auth){ 
    if (Auth.signedIn()) { 
     $location.path('/'); 
    } 

    $scope.register = function() { 
     Auth.register($scope.user).then(function (authUser) { 
      console.log(authUser); 
      $location.path('/'); 
     }); 
    }; 
}); 

在工廠signedIn下的console.log總是空。任何想法斷開連接?註冊本身工作正常,在註冊時在控制器的console.log中填入authUser

+0

我可以提供其他任何有用的信息嗎? – turbo2oh

+0

這是什麼版本的angularFire?它看起來可能是一個版本問題。例如,最新的angularFire不會自動登錄(如thinkster教程所示)。 – Kato

+0

我檢查了作爲本教程一部分的bower.json文件,它將〜0.7.1描述爲angularfire版本。在index.html中,它也看起來像它包括一個簡單的登錄從angularfire,以及firebase-simple-login.js – turbo2oh

回答

1

我發現了一個非常類似的問題進一步是沿教程:can't show logout button after $createUser

在回答我得知angularfire用於自動登錄用戶在創建之後。顯然現在不再這樣做,這就是爲什麼signedIn中的auth.user爲null。

2

The latest documentation for Angularfire說的$firebaseSimpleLogin$createUser方法返回的希望,但是它並沒有提到被傳遞到then回調任何參數。

您可以使用$getCurrentUser方法在用戶註冊後獲取當前用戶。

本教程需要更新,您應該總是檢查您正在使用的任何庫的文檔。

您的signedIn代碼應該是這樣的:

Auth.signedIn = function() { 
    auth.$getCurrentUser().then(function(currentUser) { 
     console.log(currentUser); 
    }, function() { 
     console.log('error'); 
    }); 
}; 
+0

很酷,我認爲這可能是問題所在。我通知他們這個教程已經過時,但還沒有收到回覆。我會在哪裏添加getCurrentUser到這個例子來使它工作?只需使用對它的調用替換signedIn函數? – turbo2oh

+1

@ turbo2oh我添加了代碼來告訴你它是如何工作的 –

+1

我稍微修改了你的代碼,直接替換Auth對象中的'signedIn:',但我得到了這個,任何想法:'Uncaught Error:[$ rootScope:infdig]達到10 $摘要()迭代。中止!' – turbo2oh

0

我現在正在做同樣的教程。這個代碼(在身份驗證控制器)爲我工作:

$scope.register = function() { 
     Auth.register($scope.user).then(function (authUser) { 
      console.log(authUser); 
      Auth.login($scope.user); 
      $location.path('/'); 
     }); 
    }; 

我是一個總的n00b,但什麼(我覺得)這是做的是驗證用戶身份,然後運行後會記錄用戶在正確的函數。註銷按鈕現在按預期運行。