【问题标题】:trouble on using lb-services (Loopback - Angular JS SDK)使用 lb-services 的麻烦(Loopback - Angular JS SDK)
【发布时间】:2016-10-03 07:35:51
【问题描述】:

我正在使用来自 Angular JS SDK 的 lb-services 来创建我的默认服务,目前,我在注销和 rememberMe 功能方面遇到了一些问题。

我正在关注本教程:Angular Javascript SDKLoopback 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 中,我的页面无法显示,但这意味着我的帐户没有经过身份验证,甚至环回都已成功保存我的令牌、用户 ID 和 rememberMe 布尔值在本地存储中,像这样

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

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

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

【问题讨论】:

    标签: javascript angularjs authentication local-storage loopbackjs


    【解决方案1】:

    我刚刚意识到为什么我不能使用 rememberMe 功能,那只是因为我犯了一个愚蠢的错误,在我的附加服务中的注销功能之后添加了“;”

    经过多次测试,我的问题似乎出在我的状态提供者内部。我调整了我的控制器和我的状态提供者,终于成功了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-18
      • 2017-01-20
      • 1970-01-01
      • 1970-01-01
      • 2012-04-07
      • 2014-05-25
      • 2020-05-06
      相关资源
      最近更新 更多