所以我正在使用 passportJs JWT 实现基本的登录/注册。我使用的框架是 node.js 的 express。问题是我正在注册一个用户,它工作正常,因为它通过 Postman 注册,我可以在 mongodb shell 中使用db.users.find()
. 但是,当我发出 POST 请求以验证用户身份时,当我将 JSON(应用程序/json)更改为文本时,它会给我“未找到用户”。否则它会挂起并在一段时间后终止。
应用程序.js
const app = express();
const users = require('./routes/users');
//port
const port = 3000;
//middleware
app.use(cors());
//Front
app.use(express.static(path.join(__dirname,'public')));
//middleware
app.use(bodyParser.json());
app.use(passport.initialize());
app.use(passport.session());
require('./config/passport')(passport);
护照.js
module.exports = function(){
let opts = {};
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderWithScheme('jwt');
opts.secretOrKey = 'secret';
passport.use(new JwtStrategy(opts , (jwt_payload, done) => {
User.getUserById(jwt_payload._id, (err, user) =>{
if(err){
return done(err, false);
}
if(user){
return done(null, user);
}
else{
return done(null, false);
}
})
}));
}
用户.js
router.post('/authenticate', (req,res,next) =>{
const email = req.body.email;
const password = req.body.password;
User.getUserByemail(email, (err, user) => {
if(err) throw err;
if(!user){
return res.json({success: false,msg:'user Not Found'});
}
User.comparePassword(password,user.password, (err, isMatch) => {
if(err){
if(isMatch()){
const token = jwt.sign(user,'secret', {
expiresIn: 86400 // 1 Day
});
res.json({
success: true,
token: 'JWT ' +token,
user:{
id: user._id,
name: user.fname+ ' ' + user.lname,
email: user.email
}
});
}
else{
return res.json({success: false,msg:'Wrong Password'});
}
}
});
});
});
用户.js
module.exports.getUserByemail = function(email, callback){
const query = {email: email}
User.findOne(query,callback);
}