护照js表达未知策略“local.signin”

时间:2021-04-09 20:49:07

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

我正在使用 express 和passport.js 制作登录系统,当我提交表单时出现以下错误:

unknown strategy

感谢我的护照文件有一些错误,我在那里配置了它,但我看到了一个存储库并将文件与我的文件进行了比较,我没有发现任何问题。

这是我的护照文件:

const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const pool =  require('../settings/db');
const bcrypt = require('./bcrypt');

passport.use('local.signin', new LocalStrategy({

    username: 'username',
    password: 'password',
    passReqToCallback: true

}, async (req, username, password, done) => {
    const query = await pool.query('SELECT * FROM users WHERE username = ?', [username]);
 
     console.log(req.body);
 
     if (query.length > 0) {
         const user = query[0];
         const validPassword = await bcrypt.matchPass(password, user.password);
         console.log('Hay algo en la consulta: ' + query);
         console.log(req.body);
 
         if (validPassword) {
             console.log('Contraseña valida');
             return done(null, user, req.flash('success', `Welcome ${user.username}`));
         } else {
             console.log('Contraseña invalida');
             return done(null, false, req.flash('message', 'Contraseña incorrecta'));
         }
 
     } else {
         return done(null, false, req.flash('message', 'Nombre de usuario incorrecto'));
     }
 
}));

passport.serializeUser((user, done) => {
    console.log(`Serialize: ${user}`);
    return done(null, user.id);
});

passport.deserializeUser(async (id, done) => {
    const rows = await pool.query('SELECT * FROM users WHERE id = ?', [id]);
    return done(null, rows[0]);
});

这是我的 router.js,我使用身份验证方法尝试登录用户:

    const express = require('express');
const app = express.Router();
const RegisterController = require('../controllers/RegisterController');
const LoginController = require('../controllers/LoginController');
const passport = require('passport');

app.get('/', (req, res) => {
    res.render('index');
});

app.get('/formulario-registro', RegisterController.index);
app.post('/register', RegisterController.register);

app.get('/formulario-login', LoginController.index);
app.post('/login', (req, res, next) => {

    console.log('Informacion recibida');
    console.log(req.body);

    const handler = passport.authenticate("local.signin", {
        successRedirect: '/perfil',
        failureRedirect: '/formulario-login',
        failureFlash: true
    });

    console.log(handler);

    handler(req, res, next);

});

app.get('/perfil', (req, res) => {
    res.render('profile');
});

module.exports = app;

和 index.js,我放置应用程序配置(视图引擎、护照初始化等)的主文件:

    //*imports
const express = require("express");
const morgan = require("morgan");
const pool = require('./settings/db');
const hbs = require('express-handlebars');
const path = require('path');
const app = express();
const session = require('express-session');
const cookieParser = require('cookie-parser');
const passport = require('passport');
const {database} = require('./settings/keys');
const MySQLStore = require('express-mysql-session')(session);

//*configuracion puerto
app.set('port', process.env.PORT || 4000); //* se establece el puerto del servidor.

//*configuracion motor de plantillas
app.set('views', path.join(__dirname, 'views'));

app.engine('.hbs', hbs({
    defaultLayout: 'main', //*establece la plantilla principal
    layoutsDir: path.join(app.get('views'), 'layout'), //*hace referencia al directorio donde se encuenta la plantilla.
    partialsDir: path.join(app.get('views'), 'partials'), //*hace referencia a los partials (partes html que se usan en varias páginas)
    extname: '.hbs'
}));
app.set('view engine', '.hbs'); //*establece el motor de plantillas

//*middlewares
app.use(morgan('dev')); //*permite ver mensajes más específicos del servidor.

app.use(express.static(path.join(__dirname, 'public')));

app.use(express.urlencoded({
    extended: false
})); //*permite obtener el 'cuerpo' (datos) de los formularios.


app.use(cookieParser('my ultimate secret'));

app.use(session({
    secret: 'my ultimate secret',
    resave: false, //*guarda la sesion aunque no haya sido modificada
    saveUninitialized: false, //*si inicializamos una sesion en una peticion y no guardamos nada, aun asi sera almacenada
    store: new MySQLStore(database)
}));

app.use(passport.initialize());
app.use(passport.session());


//*rutas app
app.use(require('./routes/app'));

app.listen(app.get('port'), () => {
    console.log(`Server on port ${app.get('port')}`);
});

提前致谢。

0 个答案:

没有答案