我正在使用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?
那么,有谁知道如何解决这个问题?我认为问题在于身份验证。
我对这个很困惑,我试图寻找解决方案,但我找不到。
答案 0 :(得分:0)
我刚才意识到为什么我不能使用rememberMe功能,这只是因为我犯了一个愚蠢的错误,通过把#34; ; &#34;在我的附加服务中的注销功能之后
经过多次测试,似乎我的问题出在我的州提供商内部。我调整了我的控制器和我的状态提供者,最后它已经成功地工作了。