Итак, я реализую базовый логин / регистрацию с использованием passportJs JWT.Framework, который я использую, является выражением node.js.Проблема в том, что я регистрирую пользователя, он работает нормально, так как регистрируется через Postman, и я могу видеть его в оболочке mongodb, используя db.users.find()
.Но когда я делаю 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);
}