在快递中使用护照时的不良请求

时间:2018-02-21 09:26:06

标签: node.js express passport.js passport-local

将护照整合到我的代码的登录表单中。一切正常,直到我在请求中调用passport.authenticate,返回400 Bad Request。我做错了什么?

策略

passport.use('local.login',new LocalStrategy({
    usernameField: 'Email',
    passwordField: 'Password',
},function (email,done) {
    Schema.Users.findOne({'Email': email},function (err,user) {
        if(err) {
            return done(err);
        }
        if(user==null) {
            return done(null,false,{ message: 'Incorrect username.' })
        }
        if(user.Password!==Password) {
            //console.log('Wrong password');
            return done(null,false,{ message: 'Wrong password' })
        }
        return done(null,user);
    })
}));

passport.serializeUser(function (user,done) {
    done(null,user.id);
});

passport.deserializeUser(function (id,done) {
    Schema.Users.findById(id,function (err,user) {
        done(err,user);
    })
});

在login.js内部

router.post('/x',passport.authenticate('local.signup',{
    successRedirect: '/success',
    failureFlash: '/failure'
}));

app.js

let login = require('./login.js');
app.use('/login',login);

HTML

<form action="http://localhost:8080/login/x" method="post">
    <div class="row">
        <div class="col s6">
            <label for = "email"></label>
            <input id = "Email" type="email" placeholder="Email" name="Email">
        </div>
        <div class="col s6">
            <label for = "Password"></label>
            <input id = "Password" type="Password" placeholder="Password" name="Password">
        </div>
    </div>
    <button class="waves-effect waves-light btn" type="submit">Log In</button
</form>

2 个答案:

答案 0 :(得分:2)

哦,我现在看到了,但我可能错了。您已经检查了来自db的用户密码是否与您的前端发送的密码匹配,但是您忘记在此功能中传递它,您只有一封电子邮件,所以只需尝试添加密码作为参数:

function (email, password, done) {
Schema.Users.findOne({'Email': email},function (err,user) {
    if(err) {
        return done(err);
    }
    if(user==null) {
        return done(null,false,{ message: 'Incorrect username.' })
    }
    if(user.Password!==password) {
        //console.log('Wrong password');
        return done(null,false,{ message: 'Wrong password' })
    }
    return done(null,user);
})

答案 1 :(得分:0)

基本上我没有读过护照的部分,默认情况下它只接受名为usernamepassword的参数,但我试图将其命名为{{1} }和Email(注意大写Password