【问题标题】:Passport local returns error 400 bad request with postman护照本地返回错误 400 与邮递员的错误请求
【发布时间】:2017-07-12 13:40:21
【问题描述】:

您好,我每次使用本地护照时都会收到 400 Bad Request 错误。请告诉我哪里做错了。

我正在尝试使用邮递员调用我的 /login 路由,但每次我收到 400 Bad Request 的错误

下面是我的代码:

passport.use(new LocalStrategy(
{
    email:'email',
    password:'password'
},
function(email, password, done){
    adminModel.getAdmin(email, function(err, admin){
        if(err){ return done(err);}
        if(!admin){
            return done(null, false, {message: 'Invalid Username.'});
        }
        adminModel.comparePassword(password, admin.password, function(err, isMatch){
            if(err){return done(err);}
            if(isMatch){
                return done(null, admin);
            }else{
                return done(null, false, {message: 'Invalid Password'});
            }
        })
    });
}
));

passport.serializeUser(function(admin, done){
    done(null, admin._id);
});

passport.deserializeUser(function(id, done){
    adminModel.findById(id,function(err, admin){
        done(err, admin);
    });
});
router.post('/login', passport.authenticate('local'),function(req, res){
res.send(req.body);
});

【问题讨论】:

    标签: passport.js passport-local


    【解决方案1】:

    从你给出的不可能肯定地说,但我会说十分之九的HTTP Bad Request来自this row中的passport-local,即。该请求不包含凭据。

    当你定义这个时,显然你试图告诉包含凭据的字段是emailpassword

    {
        email:'email',
        password:'password'
    }
    

    这些选项是中间件的not supported。你应该通过

    {
        usernameField: 'email',
        passwordField: 'password'
    }
    

    改为。

    另一个常见原因是没有使用 body-parser,或者您从 Postman 发送的请求未定义正确的标头以匹配数据。

    【讨论】:

    • 我在搜索我的问题时发现了这个,我将添加一个规定:中间件确实支持它,但您需要传递声明新键的对象以查找即 { usernameField: 'email', passwordField: 'passwd', session: false }
    猜你喜欢
    • 2018-07-07
    • 2018-07-22
    • 1970-01-01
    • 2019-07-28
    • 2018-04-07
    • 2019-07-21
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    相关资源
    最近更新 更多