expressJWT.unless 用来处理我们不想接受身份验证的路径,普通写法:
unless({
path:['/user']
})
简单写法适用于整个请求全部放行,但有时候我们只想给指定method请求放行,其他类型依然进行身份验证,可以使用{url:url,methods:['GET']} 注意methods里面的请求类型必须大写
unless({
path:[
{url:'/user',methods:['GET']}
]
})
要对 RESTful 结构, 例如:'/user/:_id' 放行,就可以使用自定义函数 或者 正则表达式
const myFilter = function(){}
unless(myFilter);
unless({
path:[/^\/user\/.*/]
})
unless({
path:[
{url:/^\/user\/.*/,methods:['GET']}
]
})
附上一个实际使用代码
const expressJWT = require('express-jwt');
const { jwtSercet } = require('../utils/jwtConfig');
const jwtAuth = expressJWT({
// 加密时所用的密匙
secret: jwtSercet,
// 设置算法
algorithms: ['HS256'],
// 无token请求不进行解析,并且抛出异常
credentialsRequired: false
}).unless({
path: [
'/userSession',
'/salesmanSession',
'/adminSession',
'/superAdminSession',
'/swiper',
'/freeSalesman',
'/headImg',
{ url: '/admin', methods: ['GET', 'POST'] },
{ url: /^\/salesman\/.*/, methods: ['GET'] },
{ url: '/productsCate', methods: ['GET'] },
{ url: '/products', methods: ['GET'] },
{ url: /^\/products\/.*/, methods: ['GET'] },
{ url: '/user', methods: ['POST'] },
{ url: /^\/user\/.*/, methods: ['GET'] }
]
});
module.exports = jwtAuth