我正在尝试使用护照实施本地登录,但是即使我将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
我不知道我是否错过了什么,但我认为我没有忘记任何东西
答案 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 // ...
}));