成功注册后,我无法登录快递

时间:2018-10-15 10:47:45

标签: express login passport.js

当我尝试登录时,在Express中成功注册了护照后。它失败了,我不知道哪个代码引起了错误。请帮忙。 这是我的代码。

router.post('/register',function(req,res){
//fetch user info
var firstName=req.body.firstName,
    lastName = req.body.lastName,
    mobile= req.body.mobile,
    email = req.body.email,
    password = req.body.password,
    newsConsent = req.body.newsConsent;

var userInfo = {firstName: firstName, lastName: lastName, mobile: mobile, email:email, newsConsent: newsConsent };

//register and create user
User.register(new User(userInfo), password, function(error, userCreated)
 {
     if (error)
     {
        console.log(error);    
        //  req.flash("error", error.message);
         return res.render("auth/register");
     }
     else
     {
         req.login(userCreated, function(err) {
          if (err) {
            console.log(err);
            return next(err);
          }
          console.log(userCreated);
          return res.redirect('/');
        });
     }
 });

});

//登录路径

router.post("/login", passport.authenticate("local", 
{
    successRedirect: "/",
    failureRedirect: "/register"
}), function(req, res){
    console.log(req.body);

});

还请告诉我如何知道护照错误

2 个答案:

答案 0 :(得分:0)

您需要声明策略,进行序列化和反序列化。这是我的代码。您可以根据需要进行编辑。仅供参考,我使用的是“ nip_nim”而不是“ username”,因此我将“ usernameField”设置为nip_nim。在这里,我还使用“闪存”包保存我的通知数据。

passport.use(new LocalStrategy({
    usernameField: 'nip_nim',
    passReqToCallback: true
}, function (req, nip_nim, password, done) {
    var params = {
        nip_nim: nip_nim
    }
    var user = new User_Model(params);
    user.getDataUserByNIPorNIM()
        .then(function (result) {
            if (!helper.isExist(nip_nim) || !helper.isExist(password)) {
                return done(null, false, req.flash('message_err', 'NIM/NIM dan password tidak boleh kosong.'));
            }
            if (!result) {
                return done(null, false, req.flash('message_err', 'NIP/NIM yang anda masukkan salah.'));
            }
            if (!bcrypt.compareSync(password, result.password)) {
                return done(null, false, req.flash('message_err', 'Password yang anda masukkan salah.'));
            }
            return done(null, result);
        })
}));

//serialize and deserialize passport
passport.deserializeUser(function (nip_nim, done) {
    var params = {
        nip_nim: nip_nim
    }
    var user = new User_Model(params);
    user.getDataUserByNIPorNIM()
        .then(function (result) {
            done(null, result);
        })
});

passport.serializeUser(function (req, user, done) {
    done(null, user.nip_nim, req.flash('message_success', 'Welcome, ' + user.nama_unit_org + "."));
});

答案 1 :(得分:0)

好。我找到了罪魁祸首。它不是护照,而是猫鼬模式。 我必须在用户名中添加{index:true}。

`username    : {type:String, unique: true, index: true},`.

之后,一切正常。