前端如何判断token是否过期
使用场景:网站登录之后一般会返回一个字符串的token,可解析这个token判断过期时间等
这个token是一个典型的JWT (JSON Web Token)结构,由三部分组成,每个部分都经过了Base64URL 编码
- Header(头部,算法信息)
- Payload(负载,里面包含用户信息、过期时间等)
- Signature(签名,用来校验是否被篡改)
一、解码
function decodeJWT(token) {const parts = token.split(".");if (parts.length !== 3) {throw new Error("不是合法的JWT");}// Base64URL 解码函数function base64UrlDecode(str) {str = str.replace(/-/g, "+").replace(/_/g, "/");const pad = str.length % 4;if (pad) {str += "=".repeat(4 - pad);}return atob(str); // 浏览器自带}// 解码 Payloadconst payload = JSON.parse(base64UrlDecode(parts[1]));return payload;
}
二、判断token是否过期
function isTokenExpired(token) {try {const payload = decodeJWT(token);if (!payload.exp) {console.warn("token 中没有 exp 字段,可能不会过期");return false;}const now = Math.floor(Date.now() / 1000); // 当前时间戳(秒)return now >= payload.exp;} catch (e) {console.error("解码失败:", e.message);return true;}
}