我默默地为我们基于 Express 的 RESTful API 构建了一些登录和身份验证功能。身份验证中间件如下所示:
const Login = require('../services/UserLogin');
//Include this function in any route, to make it available for logged-in users only.
module.exports = async function requireAuth (req,res,next){
const token = req.headers.token;
if(!token){
return res.status(403).end();
}
const userObject = await Login.verifyLogin(token);
if(userObject){
res.locals.id = userObject.id;//Append the user id, to be used during the request.
res.locals.userObject = userObject;
return next();
}else{
res.sendStatus(403)
}
}
Login.verifyLogin 函数使用这个,来自不同的模块:
static verifyToken(token) {
return new Promise((resolve, reject) => {
jwt.verify(token, this.getSecretKey(), function (err, decoded) {
if (err) {
resolve(false);
} else {
resolve(decoded);
}
});
})
}
很简单。问题是,与 passport-jwt 相比,此类功能是否会带来任何“安全风险”。我的意思是,通过观看有关此模块的教程,我所看到的基本上是相同的想法,只是更灵活和可配置。
我还要注意,例如,在 Laravel 中,他们“强烈建议”不要使用他们内置的基于令牌的 API 身份验证,并鼓励我们使用他们的 Passport 实现。
除了花哨的选项之外,有人能告诉我使用 passport-jwt 的真正优势是什么吗?