gpt4 book ai didi

javascript - 如何使用 AngularJS 在浏览器 cookie 中存储身份验证承载 token

转载 作者:可可西里 更新时间:2023-11-01 01:56:40 27 4
gpt4 key购买 nike

我已经使用 ASP.net Identity 创建了一个不记名 token 。在 AngularJS 中,我编写了这个函数来获取授权数据。

$scope.GetAuthorizeData = function () {
$http({
method: 'GET',
url: "/api/Values",
headers: { 'authorization': 'bearer <myTokenId>' },
}).success(function (data) {
alert("Authorized :D");
$scope.values = data;
}).error(function () {
alert("Failed :(");
});
};

所以我想将此 token 存储到浏览器 cookie 中。如果此 token 存在,则获取 token 并从 IIS 服务器获取数据否则重定向到登录页面以登录以获取新 token 。

同样,如果用户点击注销按钮,它应该从浏览器 cookie 中删除 token 。

如何做到这一点?有可能吗?这是验证和授权用户的正确方法吗?如果有多个用户 token 怎么办?

最佳答案

在 AngularJS API 中有一个可用的 $cookies 服务,使用ngCookies 模块。它可以像下面这样使用:

function controller($cookies) {
//set cookie
$cookies.put('token', 'myBearerToken');

//get cookie
var token=$cookies.get('token');

//remove token
$cookies.remove('token');
}
controller.$inject=['$cookies'];

对于您的情况,它将是:

//inject $cookies into controller
$scope.GetAuthorizeData = function () {
$http({
method: 'GET',
url: "/api/Values",
headers: { 'authorization': 'bearer <myTokenId>' },
})
.success(function (data) {
$cookies.put('token', data);
}).error(function () {
alert("Failed :(");
});
};

您还必须添加 angular-cookies module代码。并将其添加到您的 Angular 应用程序中:angular.module('myApp', ['ngCookies']);Docs for Angular Cookies.

我还想建议使用 Http 拦截器,它会为每个请求设置 bearer header ,而不必自己为每个请求手动设置。

//Create a http interceptor factory
function accessTokenHttpInterceptor($cookies) {
return {
//For each request the interceptor will set the bearer token header.
request: function($config) {
//Fetch token from cookie
var token=$cookies.get['token'];

//set authorization header
$config.headers['Authorization'] = 'Bearer '+token;
return $config;
},
response: function(response) {
//if you get a token back in your response you can use
//the response interceptor to update the token in the
//stored in the cookie
if (response.config.headers.yourTokenProperty) {
//fetch token
var token=response.config.headers.yourTokenProperty;

//set token
$cookies.put('token', token);
}
return response;
}
};
}
accessTokenHttpInterceptor.$inject=['$cookies'];

//Register the http interceptor to angular config.
function httpInterceptorRegistry($httpProvider) {
$httpProvider.interceptors.push('accessTokenHttpInterceptor');
}
httpInterceptorRegistry.$inject=['$httpProvider'];

//Assign to module
angular
.module('myApp')
.config(httpInterceptorRegistry)
.factory('accessTokenHttpInterceptor', accessTokenHttpInterceptor)

有了 http 拦截器,您就不需要为每个请求设置 Authorization header

function service($http) {
this.fetchToken=function() {
//Authorization header will be set before sending request.
return $http
.get("/api/some/endpoint")
.success(function(data) {
console.log(data);
return data;
})
}
}
service.$inject=['$http']

正如鲍里斯所说:还有其他方法可以解决这个问题。您还可以使用 localStorage 来存储 token 。这也可以与 http 拦截器一起使用。只需将实现从 cookie 更改为 localStorage。

function controller($window) {
//set token
$window.localStorage['jwt']="myToken";

//get token
var token=$window.localStorage['jwt'];
}
controller.$inject=['$window'];

关于javascript - 如何使用 AngularJS 在浏览器 cookie 中存储身份验证承载 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34545875/

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