护照验证超时

时间:2018-05-15 14:54:42

标签: node.js passport-local

我刚刚开始了我的Node.js之旅,我正试图解决制定用户登录的本地策略的想法。

我一直在追逐我的职能并通过Postman进行测试。现在,我的身份证明是悬而未决的,我无法理解为什么。

passport.use(new LocalStrategy(
    function(username, password, done){
        console.log(username) // <-- this doesn't log
        User.findOne({userName: username}, function(err, user){
            if(err) return done(err);
            if(!user){
                return done(null, false, {
                    message: 'Could not login with those details.'
                });
            }
            if(!user.validPassword(password)) {
                return done(null, false, {
                    message: 'Could not login with those details.'
                });
            }
            return done(null, user);
        })   
    }
))

我做了一个非常基本的帖子请求,应用了身份验证。

app.post('/login', function(req, res){
    console.log(req.body)
    if(!req.body.userName || !req.body.password ) {
        res.status(400),
        res.json({"status" : "fail", "message" : "All fields 
required"});
        return;
    }

    passport.authenticate('local', function(err, User, info){
        let token;

        if(err){
            res.status(400),
            res.json({"status" : "fail", "message" : err});
            return;
        }

        if(User){
            token = User.generateJwt();
            res.status(200);
            res.json({"status" : "success", "token" : token });

        }else{
            res.status(401);
            res.json({"status" : "fail", "message" : info });
        }
    })
}) 

从我所看到的情况来看,初始检查可以很好地删除字段,但是当它点击passport.authenticate时它会挂起并且甚至看起来不属于我定义的策略。

我一直在浏览文档,我确定我在这里遗漏了一些东西,但却无法看到它。如果有人能指出我正确的方向,我真的很感激。

1 个答案:

答案 0 :(得分:0)

var app = require('express')(); var http = require('http').Server(app); var io = require('socket.io')(http); app.get('/', function(req, res){ res.sendFile(__dirname + '/index.html'); }); io.on('connection', function(socket){ socket.on('new user', function(data) { console.log(data) }) socket.on('disconnect', function(data) { console.log(data) }) http.listen(3000, function(){ console.log('listening on *:3000'); }) } 的调用会返回签名为passport.authenticate的中间件函数。在您的示例中,您使用custom callback功能,因此您必须使用处理程序中的相关参数手动调用此结果函数:

(req, res, next)

另请注意,app.post('/login', function(req, res){ console.log(req.body) if(!req.body.userName || !req.body.password ) { res.status(400), res.json({"status" : "fail", "message" : "All fields required"}); return; } passport.authenticate('local', function(err, User, info) { let token; if(err){ res.status(400), res.json({"status" : "fail", "message" : err}); return; } if (User) { token = User.generateJwt(); res.status(200); res.json({"status" : "success", "token" : token }); } else{ res.status(401); res.json({"status" : "fail", "message" : info }); } // perform an actual call })(req, res); }) 默认情况下会查找passport-local字段,而不是username,就像您在请求的参数验证中一样。