node.js使用passport 做登录验证,查看程序的passport.use始终没有调用,求解
这是我的app.js
const passport = require("passport");
// passport初始化
app.use(passport.initialize());
require("./config/passport")(passport);
这是我的passport.js
文件
const passport = require("passport");
const JwtStrategy = require('passport-jwt').Strategy,
ExtractJwt = require('passport-jwt').ExtractJwt;
const User = require("../model/admin");
const opts = {}
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
opts.secretOrKey = 'secret';
module.exports = passport => {
passport.use(new JwtStrategy(opts, (jwt_payload, done) => {
console.log("paloadLaod"+jwt_payload);//始终打印不出来
User.findOne({email:jwt_payload.email})
.then(user => {
if (user) {
return done(null, user);
}
return done(null, false);
})
.catch(err => console.log(err));
}));
}
登录验证产生token的路由
router.post("/login", (req, res) => {
const email = req.body.email;
const password = req.body.password;
// 查询数据库
Admin.findOne({
email
})
.then(user => {
if (!user) {
return res.json({
code: 404,
msg: "账号不存在~"
})
}
// 密码匹配
if (password == user.password) {
const rule = {
id:user._id,
email: user.email,
name: user.name,
avator:user.avator,
};
jwt.sign(rule, "secret", {
expiresIn: 60*60*60
}, (err, token) => {
if (err) throw err;
res.json({
code: 200,
success: true,
token: "lian " + token,
})
})
} else {
return res.status(400).json("密码错误");
}
})
})
验证token是否过期的接口代码
router.post("/verify",passport.authenticate("jwt",{session:false}),async(req,res)=>{
console.log(req.headers)
if(req.body.verify=="lian"){
res.json({
code:200,
msg:"验证成功"
})
}
})
使用postman验证的过程和结果如下
图中箭头处就是token
下图是参数和返回的结果
我在多次测试当中,曾经以为是我的token有问题,但最后发现在pssport.js
的passport.use()始终未曾被调用,所以想问问为什么,验证代码始终进不去。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
请问现在应该如何解决这个问题呀?