axios.interceptors.request.use(function(config) {
//从localStorage里取出token
const token = localStorage.getItem('tokenName');
//把token塞入Authorization里
config.headers.Authorization = `Bearer ${token}`;
return config;
},
function(error) {
// Do something with request error
return Promise.reject(error);
}
);
服务端处理前端发送过来的Token
前端发送请求携带token,后端需要判断以下几点:
token是否正确,不正确则返回错误
token是否过期,过期则刷新token 或返回401表示需要从新登录
关于上面两点,需要在后端写一个中间件来完成:
app.use((ctx, next) => {
if (ctx.header && ctx.header.authorization) {
const parts = ctx.header.authorization.split(' ');
if (parts.length === 2) {
//取出token
const scheme = parts[0];
const token = parts[1];
if (/^Bearer$/i.test(scheme)) {
try {
//jwt.verify方法验证token是否有效
jwt.verify(token, secret.sign, {
complete: true
});
} catch (error) {
//token过期 生成新的token
const newToken = getToken(user);
//将新token放入Authorization中返回给前端
ctx.res.setHeader('Authorization', newToken);
}
}
}
}
return next().catch(err => {
if (err.status === 401) {
ctx.status = 401;
ctx.body =
'Protected resource, use Authorization header to get accessn';
} else {
throw err;
}});
}); 上面中间件是需要验证token时都需要走这里,可以理解为拦截器,在这个拦截器中处理判断token是否正确及是否过期,并作出相应处理。
后端刷新token 前端需要更新token
后端更换新token后,前端也需要获取新token 这样请求才不会报错。
由于后端更新的token是在响应头里,所以前端需要在响应拦截器中获取新token。
依然以axios为例:
//响应拦截器
axios.interceptors.response.use(function(response) {
//获取更新的token
const { authorization } = response.headers;
//如果token存在则存在localStorage
authorization && localStorage.setItem('tokenName', authorization);
return response;
},
function(error) {
if (error.response) {
const { status } = error.response;
//如果401或405则到登录页
if (status == 401 || status == 405) {
history.push('/login');
}
}
return Promise.reject(error);
}
);总结
以上所述是小编给大家介绍的koa+jwt实现token验证与刷新功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对软件开发网网站的支持!









