gpt4 book ai didi

javascript - 如何在 angular.js 中使用 token 管理身份验证?

转载 作者:行者123 更新时间:2023-11-29 17:02:28 26 4
gpt4 key购买 nike

大家好,我创建了一个带有 token 身份验证的 RESTful API (Rails 4 + Devise),我还使用 gem(rack-cors) 管理 CORS 实现,但现在我想将 API 与 angular.js 一起使用

为此我这样做:

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;
}]);

这是我的 Controller

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'});
};

}]);

到目前为止,我对实现没有任何问题。我的问题是不知道如何管理返回我工厂的 token 。

使用 angular.js 管理用户 token 并在 angular.js 的不同 Controller 中验证用户的最佳做法是什么?

这是我的第一个使用 token 进行身份验证的应用程序。非常感谢您的建议!

最佳答案

一种常见的做法是将安全逻辑放在服务中,并使用 httpInterceptor 在您的请求中设置 token 。

安全服务。

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
};
}]);

这个特定的登录方法可以被登录 Controller 使用,例如:当用户登录时返回的 token 被存储。

现在您可以使用拦截器将 token 添加到所有 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;
}
};
}]);

启动应用程序时,不要忘记添加拦截器

        .config(['$httpProvider',function ($httpProvider) {
$httpProvider.interceptors.push('authorizationInterceptor');
}]);

现在 token 将在每个 http 请求上设置,如果失败,您将如何处理由您决定。

例如,您可以添加另一个响应拦截器,如果收到 401 或 403 响应,则重定向到登录页面等

关于javascript - 如何在 angular.js 中使用 token 管理身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26748106/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com