背景
使用node的express框架搭建后台系统,expressJWT做权限验证。
不管用户是否登录都走同一路由,如果携带了token则正常解析,不带token则不解析,并正常向下执行。
- 以下是正常解析token, 并将其挂载到req的user上。
// 指定不需要解析和验证token的路由,可写多个自定义验证规则(在此仅匹配以unapi开头)
app.use(
expressJWT({
secret , // 秘钥
algorithms:['HS256']
})
.unless({path:[/^\/unapi\//]}
))
- 以下是自定义解析token
app.use(expressJWT({
secret , // 秘钥
algorithms:['HS256'],
credentialsRequired: false, // 用来对无 Token 请求不进行解析和抛出异常。
getToken: function fromHeaderOrQuerystring(req) {
// 如果携带token时正常解析
if (authorization && authorization.split(" ")[0] === "Bearer") {
return authorization.split(" ")[1];
}
return null;
// 如果针对某一路由需要验证token时,可以手动抛出错误
//if(!req.url.includes('/public/register')){
//return new Error('{name:"UnauthorizedError"}')
//}
},
}))