【发布时间】:2016-10-03 07:35:51
【问题描述】:
我正在使用来自 Angular JS SDK 的 lb-services 来创建我的默认服务,目前,我在注销和 rememberMe 功能方面遇到了一些问题。
我正在关注本教程: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 中,我的页面无法显示,但这意味着我的帐户没有经过身份验证,甚至环回都已成功保存我的令牌、用户 ID 和 rememberMe 布尔值在本地存储中,像这样
$LoopBack$accessTokenId = ....
$LoopBack$currentUserId = ...
$LoopBack$rememberMe = true // automatically become true?
那么,有谁知道如何解决这个问题?我认为问题出在身份验证上。
我对这个很困惑,我试图寻找解决方案,但我找不到任何解决方案。
【问题讨论】:
标签: javascript angularjs authentication local-storage loopbackjs