最近几天,我在使用Ionic Framework制作的应用程序中一直在努力进行身份验证。我使用NodeJS作为后端和护照JWT策略进行身份验证。我现在开始运行,但这是我的第一次认证,我不知道什么是最佳实践,我已经看到了很多不同的方法。
目前我正在将令牌保存到本地存储,而在我的主控制器中,我正在检查用户是否有令牌等等,这是我的代码:
mainCtrl.js
angular.module('authApp').controller('mainCtrl', function($scope, Auth) {
$scope.currentUser = {};
if(Auth.isLoggedIn()) {
Auth.getUser().then(function(response) {
$scope.currentUser = response.data.user;
console.log(response);
})
console.log('User logged in');
} else {
$scope.currentUser = false;
console.log('User not logged in');
}
});
auth.js
angular.module('authApp').factory('Auth', function($http, API, AuthToken) {
var service = {};
service.register = function(user) {
$http.post(API + '/api/register', user).then(function(response) {
console.log(response);
}, function() {
console.log(response);
});
}
service.login = function(user) {
var promise = $http.post(API + '/api/login', user).then(function(response) {
console.log(response);
AuthToken.setToken(response.data.token);
}, function() {
console.log(response);
});
return promise;
}
service.logout = function() {
AuthToken.setToken();
}
service.isLoggedIn = function() {
if(AuthToken.getToken()) {
return true;
} else {
return false;
}
}
service.getUser = function() {
if(AuthToken.getToken()) {
return $http.get(API + '/api/currentuser');
} else {
console.log('User has no token');
}
}
return service;
});
angular.module('authApp').factory('AuthToken', function($window) {
var service = {};
service.setToken = function(token) {
if(token) {
$window.localStorage.setItem('token', token);
} else {
$window.localStorage.removeItem('token');
}
}
service.getToken = function() {
return $window.localStorage.getItem('token');
}
return service;
});
angular.module('authApp').factory('AuthInterceptors', function(AuthToken) {
var service = {};
service.request = function(config) {
var token = AuthToken.getToken();
if(token) {
config.headers['Authorization'] = token;
}
return config;
}
return service;
});
这很有效。例如。在我的/个人资料页面中,我可以通过{{currentUser.name}}等显示用户个人资料,但这是最佳做法,还是应该将当前用户信息保存在其他位置?