Nel*_*nez 2 javascript restful-authentication access-token angularjs angularjs-scope
大家好我创建了一个带有令牌认证的RESTful API(Rails 4 + Devise),我还用gem(rack-cors)管理CORS实现,但现在我想用angular.js的API
为此,我这样做:
var app = angular.module('models');
app.factory('Session',['$resource',function($resource){
var Session = $resource(
'http://api.creositios.dev/sessions/:id',
{},
{
create: { method: 'POST'},
delete: { method: 'DELETE', params: { id: '@id'} }
}
);
return Session;
}]);
Run Code Online (Sandbox Code Playgroud)
这是我的控制者
app = angular.module('controllers');
app.controller('SessionCtrl',['$scope','Session',function($scope,Session){
$scope.new_session = function(){
$scope.session = Session.create({email: 'developer.jimenez@gmail.com', password: '12345678'});
};
}]);
Run Code Online (Sandbox Code Playgroud)
到目前为止,我对实现没有问题.我的问题是不知道如何管理返回我工厂的令牌.
使用angular.js管理用户令牌的好方法是什么,并在angular.js中的不同控制器中验证用户?
这是我第一个使用令牌进行身份验证的应用.建议非常感谢!
通常的做法是将安全逻辑放在服务中,并使用httpInterceptor在请求中设置令牌.
安保服务.
angular.module('security')
.factory('Security', ['$http', function ($http) {
var token;
function login(email, password) {
return $http.post('/auth/login', {email: email, password: password})
.then(function (response) {
if (response.data.token) {
token=response.data.token;
}
});
}
function getToken(){
return token;
}
return {
login:login,
token:getToken
};
}]);
Run Code Online (Sandbox Code Playgroud)
登录控制器可以使用这种特定的登录方法,例如:当用户登录时,存储返回的令牌.
现在,您可以使用拦截器将令牌添加到所有http请求中
.factory('authorizationInterceptor', ['Security', function (Security) {
return {
request: function (config) {
var token=Security.getToken();
config.headers = config.headers || {};
if (token) {
config.headers.Authorization = 'Bearer ' + token;
}
return config;
}
};
}]);
Run Code Online (Sandbox Code Playgroud)
引导应用程序时,不要忘记添加拦截器
.config(['$httpProvider',function ($httpProvider) {
$httpProvider.interceptors.push('authorizationInterceptor');
}]);
Run Code Online (Sandbox Code Playgroud)
现在,令牌将在每个http请求上设置,如果失败,您将采取的措施取决于您.
例如,您可以添加另一个响应拦截器,如果获得401或403响应重定向到登录页面等