使用lb-services时出现问题(Loopback - Angular JS SDK)

时间:2016-06-03 09:40:00

标签: javascript angularjs authentication local-storage loopbackjs

我正在使用Angular JS SDK中的lb-services来创建我的默认服务,目前,我在登出时遇到了一些麻烦。记住我的功能。

我正在关注本教程:Angular Javascript SDK& Loopback getting started intermediate,我创建身份验证的方式与示例相同,并进行了一些调整以在我的应用程序中应用它们。

我不确定如何描述它,但这里是我退出的一些代码&记住功能

在我的 stateProvider 中,我将这种状态作为我的根应用程序

.state('app', {                
url:'/',
abstract: true,                
views:{                    
'bodyLogin': {templateUrl : 'views/login/body.html',              
controller  : 'BodyController'},                    
'bodyMain': {templateUrl : 'views/main/body.html',                        
controller  : 'BodyController'}}            
})
.state('app.mainUnreg', {                
url:'home',                
views: {                    
'content@app': {                        
templateUrl : 'views/login/home.html'                    
}}})
.state('app.mainReg', {               
 url:'mainMenu',                
views: {                    
'header@app': {                        
templateUrl : 'views/main/header.html'                    
},                    
'sidebar@app': {                        
templateUrl : 'views/main/sidebar.html'                    
},                    
'middle@app': {                        
templateUrl : 'views/main/home.html'                    
},                    
'footer@app': {                       
templateUrl : 'views/main/footer.html'                    
}},                
controller: 'HomeController'})

的index.html

<div ng-if="!loggedIn" ui-view="bodyLogin" class="site-wrapper" ui-sref-active="app.mainUnreg"></div>        
<div ng-if="loggedIn" ui-view="bodyMain" ui-sref-active="app.mainReg"></div>

所以,如果我还没有登录,我将进入bodyLogin,这意味着我将显示我的登录模板,否则,如果我已登录,我将进入bodyMain

我已成功登录并进入我的主页面,但是在这里,它应该已经过身份验证,因为在我的bodyController中,

.controller('BodyController', [..., function(...){    
//this line is to check whether the user has been authenticated or not
if(Account.isAuthenticated() === false) {        
$scope.loggedIn = false;}    
// ------------

if($scope.loggedIn === false){        
$scope.layout = 'login'; 
$state.go('app.mainUnreg');
}   
else{$scope.loggedIn = true; 
$scope.layout = 'styles'; 
$state.go('app.mainReg');    
}}])

.controller('LoginController', [..., function (...) {    $currentUserId = Account.getCurrentId();    
$scope.$stateParams = $stateParams;    $scope.loginData = {};    $scope.doLogin = function() {                AuthService.login($scope.loginData)        
.then(function() {            
$scope.loggedIn = true;                     
location.reload();        });    };}])

.controller('LogoutController', [..., function(...) {
AuthService.logout()
.then(function() {
console.log("Logging out . . .");
$scope.loggedIn = false;
$state.go('app');     });     }]);
And some additional service beside lb-services.js to handle my authentication,

function login(loginData) {
        var params = { rememberMe: loginData.rememberMe };
        var credentials = {
            email: loginData.email,
            password : loginData.password
        };
        return User
            .login(params, credentials)
            .$promise.then(function(response){                $rootScope.currentUser = {...};
                console.log($rootScope.currentUser);
            },
            function(response) {
                console.log(response);
            });
    }
    function logout(){
        return User
        .logout()
        .$promise.then(function(){
            $rootScope.currentUser = null;
        });
    };

我认为,使用这种代码,尤其是我已经检查过

if(Account.isAuthenticated() === false){...}

并成功进入我的主页面,我已成功登录并进行身份验证,不是吗?

但是,如果我尝试将ng-show="Account.isAuthenticated()"放在主页app.mainReg的顶部div中,则我的页面无法显示,但这意味着我的帐户未经过身份验证,即使是loopback已成功将我的令牌,用户ID和rememberMe布尔值保存在本地存储中,如此

$LoopBack$accessTokenId = ....
$LoopBack$currentUserId = ...
$LoopBack$rememberMe = true // automatically become true?

那么,有谁知道如何解决这个问题?我认为问题在于身份验证。

我对这个很困惑,我试图寻找解决方案,但我找不到。

1 个答案:

答案 0 :(得分:0)

我刚才意识到为什么我不能使用rememberMe功能,这只是因为我犯了一个愚蠢的错误,通过把#34; ; &#34;在我的附加服务中的注销功能之后

经过多次测试,似乎我的问题出在我的州提供商内部。我调整了我的控制器和我的状态提供者,最后它已经成功地工作了。