带有Postgresql的Passportjs

时间:2019-02-07 22:34:08

标签: node.js postgresql sequelize.js passport.js

我在使用护照时遇到麻烦。使用本地策略进行身份验证,在本地使用postgresql并使用此策略进行比较并尝试登录:

const LocalStrategy = require('passport-local').Strategy;
const db = require('./config/database.js');
const bcrypt = require('bcryptjs');
const User = require('../models/User');

module.exports = function (passport) {
  passport.use(
    new LocalStrategy({
      usernameField: 'correo'
    }, (correo, contrasena, done) => {
      User.findOne({
          correo: correo
        })
        .then(user => {
          if (!user) {
            return done(null, false, {
              message: 'El correo ingresado no está registrado'
            });
          }
          bcrypt.compare(contrasena, user.contrasena, (err, isMatch) => {
            if (err) throw err;

            if (isMatch) {
              return done(null, user);
            } else {
              return done(null, false, {
                message: 'La contraseña es incorrecta'
              })
            }
          });
        })
        .catch(err => console.log(err));
    })
  );
 passport.serializeUser((user, done) =>{
    done(null, user.id);
  });

  passport.deserializeUser((id, done) => {
    User.findById(id, (err, user) =>{
      done(err, user);
    });
  });

}

当我尝试登录时,即使我输入了正确的凭据进行身份验证,也只能从登录句柄路由中获取失败重定向:

router.post('/login', (req, res, next) => {
  passport.authenticate('local', {
    successRedirect: '/dashboard',
    failureRedirect: '/users/login',
    failureFlash: true
  })(req, res, next);
});

我拥有用于​​会话的中间件,并在我的app.js和会话上初始化,当然还有序列化和反序列化。

0 个答案:

没有答案