我发出发布请求时,邮递员挂了。发布请求可以正常注册,但不能登录

时间:2019-05-31 06:21:42

标签: node.js mongodb passport.js postman passport-jwt

因此,我正在使用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);
}

1 个答案:

答案 0 :(得分:0)

根据我在您的代码中看到的情况,护照与您的错误无关,因为您的/authenticate路线是公开的(不使用护照中间件),因此我们可以从方程式中排除这一点。

我建议仔细检查/记录req.body,看看您是否在API函数中获得了正确的信息,我很确定数据是错误的,特别是因为您在谈论请求格式文本/ json。