因此,我正在使用passportJs JWT实现基本的登录/注册。我使用的框架是node.js的表达。问题是我正在注册用户,它通过Postman注册时工作正常,我可以使用db.users.find()
在mongodb shell中看到它。但是,当我发出POST请求以验证用户身份时,意味着登录,当我将JSON(application / json)更改为Text时,它给了我“找不到用户”的信息。否则,它将挂起,并在一段时间后终止。
app.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);
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);
}
})
}));
}
users.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'});
}
}
});
});
});
user.js
module.exports.getUserByemail = function(email, callback){
const query = {email: email}
User.findOne(query,callback);
}
答案 0 :(得分:0)
根据我在您的代码中看到的情况,护照与您的错误无关,因为您的/authenticate
路线是公开的(不使用护照中间件),因此我们可以从方程式中排除这一点。
我建议仔细检查/记录req.body
,看看您是否在API函数中获得了正确的信息,我很确定数据是错误的,特别是因为您在谈论请求格式文本/ json。