Почтальон висит, пока я делаю почтовый запрос.Отправить запрос Работает нормально для регистрации, но не для входа - PullRequest
0 голосов
/ 31 мая 2019

Итак, я реализую базовый логин / регистрацию с использованием 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);
}

1 Ответ

0 голосов
/ 31 мая 2019

Из того, что я вижу в вашем коде, паспорт не имеет ничего общего с вашей ошибкой, поскольку ваш маршрут /authenticate является общедоступным (без использования промежуточного программного обеспечения для паспорта), поэтому мы можем вывести его из уравнения.

Я бы предложил дважды проверить / записать req.body и посмотреть, получаете ли вы правильную информацию в своей функции API, я уверен, что данные неверны, особенно если вы говорите о формате запроса text / json.

...