【发布时间】:2015-02-23 11:59:13
【问题描述】:
我是 angularJs 的新手,我正在尝试在我的应用程序中实现登录/注销。
我有一个用于登录用户的 AuthService,以及一个将身份验证令牌写入本地存储的 SessionService(我正在使用 jwt)
这里是 AuthService:
'use strict';
angular.module('App')
.factory('AuthService', ['ApiService', 'SessionService', '$q', '$timeout', 'jwtHelper', function (ApiService, SessionService, $q, $timeout, jwtHelper) {
// inherit
var service = Object.create(ApiService);
service.login = login;
service.logout = logout;
service.check = check;
service.user = user;
return service;
function login(credentials) {
return service.form('user.login', credentials)
.then(function success(response) {
SessionService.setToken(response.token);
return response;
});
}
function logout() {
// here we use a promise so it's easier to handle
// logout in the controller by chaining methods
var d = $q.defer();
$timeout(function () {
SessionService.setToken();
d.resolve();
}, 0);
return d.promise;
}
function check() {
var token = SessionService.getToken();
return !!token && !jwtHelper.isTokenExpired(token);
}
function user() {
return service.call('user', {cache: true});
}
}]);
我面临的问题在于注销方法。我没有服务器调用要做,只需清除本地存储并且用户已注销,但我想用一个承诺来处理这个问题,所以在控制器中我可以执行以下操作:
function logout() {
AuthService.logout().then(function success() {
$state.go('login');
});
}
这是实现这一目标的好方法吗?
【问题讨论】:
-
似乎是正确的,您在控制台上是否有任何错误?有什么问题?
-
我没有错误,只是在问自己是否这是以角度方式处理此问题的正确方法
-
无关:我建议使用组合而不是继承:en.wikipedia.org/wiki/Composition_over_inheritance
标签: javascript angularjs authentication