JWT中token在前端的所有操作

本文介绍如何使用Ajax获取并管理Token,包括设置Token到Cookie、从Cookie读取Token及通过Ajax请求头添加Token的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 获取token
$.ajax({
		url: "http://localhost:8080",
		data: { data: "data" },
		type: "POST",
		dataType: "json",
		async: false,
		cache: false,
		success: function(data,headers) {
			console.log(data);
			console.log(headers);//一般是在这里拿,要看后端是煮面封装的
		},
		error: function(data) {
			console.log(data);
		}
	});

  • 将token存入浏览器cookie
	function setTokenToCookie(value) {
		var Days = 1; //此 cookie 将被保存 30 天
		var exp = new Date();
		exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000);
		document.cookie = "my_token =" + escape(value) + ";expires=" + exp.toGMTString();
	}

  • 将token从浏览器cookie中取出
function getCookie(name) {
		var cookieValue = "啥也没有!!";
		if (document.cookie && document.cookie !== '') {
			var cookies = document.cookie.split(';');
			for (var i = 0; i < cookies.length; i++) {
				var cookie = $.trim(cookies[i]);
				if (cookie.substring(0, name.length + 1) === (name + '=')) {
					cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
					break;
				}
			}
		}
		return cookieValue;
	}
  • 发送ajax请求时添加token到请求头
	$.ajax({
		url: "http://localhost:8080",
		data:{data:"data"},
		type: "POST",
		dataType: "json",
		headers: {
			Token: my_token //这里是Token
		},
		async: false,
		cache: false,
		success: function(data) {
			console.log(data);
		},
		error: function(data) {
			console.log(data);
		}
	});

### 如何在前端项目中实现 JWT Token #### 获取并存储 JWT Token 当用户成功登录后,服务器会返回一个 JWT Token 给客户端。通常情况下,在前端应用中可以使用 `localStorage` 或者 `sessionStorage` 来保存这个令牌。 ```javascript // 存储 token 到 localStorage 中 localStorage.setItem('accessToken', 'your.jwt.token.here'); ``` 为了安全起见,建议仅在 HTTPS 环境下传输敏感数据,并考虑设置 HttpOnly cookie 作为另一种替代方案[^1]。 #### 发送带有 Authorization Header 的请求 每次向受保护资源发起 HTTP 请求时都需要附带该用户的访问凭证——即之前获得的 JWT Token。这可以通过配置 Axios 默认头部信息轻松完成: ```javascript import axios from 'axios'; const instance = axios.create({ baseURL: process.env.VUE_APP_API_URL, }); instance.interceptors.request.use((config) => { const accessToken = localStorage.getItem('accessToken'); if (accessToken) { config.headers.Authorization = `Bearer ${accessToken}`; } return config; }); ``` 上述代码片段展示了如何利用拦截器自动为每一个发出的请求附加授权头字段[^2]。 #### 处理过期 Tokens 和刷新机制 考虑到安全性因素,JWTs 往往具有较短的有效期限。因此应用程序应当具备处理已失效 tokens 的能力。一种常见做法是在遇到未授权错误响应(`401 Unauthorized`)时尝试重新获取新的 access_token: ```javascript let isRefreshing = false; function refreshToken() { // 实现具体的刷新逻辑... } instance.interceptors.response.use( response => response, error => { const originalRequest = error.config; if ( error.response.status === 401 && !originalRequest._retry ) { if (!isRefreshing) { isRefreshing = true; refreshToken().then(() => { isRefreshing = false; originalRequest.headers['Authorization'] = 'Bearer ' + localStorage.getItem('accessToken'); return instance(originalRequest); }); } originalRequest._retry = true; return new Promise(resolve => { addSubscriber(access_token => { originalRequest.headers[ 'Authorization' ] = 'Bearer ' + access_token; resolve(instance(originalRequest)); }); }); } return Promise.reject(error); } ); function addSubscriber(callback) { subscribers.push(callback); } ``` 这段 JavaScript 代码实现了对 401 错误状态码的监听,并触发一次性的 token 更新流程;一旦新 token 可用,则继续执行原始请求。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值