Passportjs本地身份验证始终失败

时间:2020-10-10 17:36:46

标签: node.js express passport.js

我正在尝试使用护照实施本地登录,但是即使我将console.log放在Strategy上但未显示在控制台上,也始终会得到故障重定向,这表明该功能未完成,但我没有任何错误

视图

<form action="/login" method="post">
        <input type="text" name="username" id="username">
        <input type="password" name="password" id="password">
        <input type="submit" value="Iniciar sesión">
    </form>

index.js

const express = require('express')
const app = express()
const { I18n } = require('i18n')
const path = require('path');
//const i18n = new I18n()
const router = require('./routes/routes.js') 
const config = require('./config/config.js')
var morgan = require('morgan')
const mongoose = require('mongoose');
const db = mongoose.connection;
const session = require('express-session')
const flash = require('connect-flash');
const passport = require('passport');
const User = require('./models/user');


/*i18n.configure({
    locales: ['es', 'en'],
    directory: path.join(__dirname, '/locales'),
    defaultLocale: 'es',
    register: global
})*/

app.use(session({
  secret: config.session_secret,
  resave: false,
  saveUninitialized: false
}))

app.use(passport.initialize())
app.use(passport.session())
app.use(express.static(__dirname + '/public'));
app.use(flash());

//app.use(morgan('combined'))

/*para utilizar el i18n con twig
app.use(function(req, res, next) {
    // express helper for natively supported engines
    res.locals.__ = res.__ = function() {
        return i18n.__.apply(req, arguments);
    };
 
    next();
});*/

//rutas
app.use(router)

mongoose.connect( config.db_connect, {
  useNewUrlParser: true,
  useUnifiedTopology: true,
  useFindAndModify: false,
  useCreateIndex: true
});

db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
    console.log('Database successfull connection!!');
    app.listen(config.port, () => {
        console.log(`ChatLearning app listening at http://localhost:${config.port}`)
    })
});

routes.js

const express = require('express');
const router = express.Router();
const registerController = require('../controllers/registerController');
const loginController = require('../controllers/loginController');
var bodyParser = require('body-parser');
const User = require('../models/user');
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const authMiddleware = require('../middleware/authMiddleWare');


// parse application/json
var jsonParser = bodyParser.json() 
// create application/x-www-form-urlencoded parser
var urlencodedParser = bodyParser.urlencoded({ extended: false })

passport.serializeUser(function(user, done) {
    done(null, user.id);
});
  
passport.deserializeUser(function(id, done) {
    User.findById(id, function(err, user) {
      done(err, user);
    });
});

passport.use('local-signin', new LocalStrategy({
    passReqToCallback: true
  }, async (req, email, password, done) => {
    const user = await User.findOne({email: email});
    console.log('user', user);//this log its not being shown on the console
    if(!user) {
      return done(null, false, req.flash('signinMessage', 'No User Found'));
    }
    if(!user.comparePassword(password)) {
      return done(null, false, req.flash('signinMessage', 'Incorrect Password'));
    }
    return done(null, user);
}));


router.post('/login',
    passport.authenticate('local-signin', {   
        successRedirect: '/',
        failureRedirect: '/login',
        failureFlash: true 
    })
);

router.get('/',(req, res) => {
    res.send('Página principal')
})

router.get('/login', loginController.login);

router.get('/registro', registerController.register);
router.post('/registro', urlencodedParser, registerController.registerUser);

module.exports = router

我不知道我是否错过了什么,但我认为我没有忘记任何东西

1 个答案:

答案 0 :(得分:1)

默认情况下,LocalStrategy期望在名为username和password的参数中找到凭据。如果您的网站希望对这些字段使用不同的名称,则可以使用选项更改默认值

passport.use('local-signin', new LocalStrategy({ 
   usernameField: 'email',   
   passwordField: 'password',
   passReqToCallback: true, 
   session: true }, function(req, username, password, done){ 
     // request object is now first argument // ...
}));

Resource