Error: Estrategia de autenticación “local” desconocida.
Estoy utilizando passport para autenticar usuarios, he escrito el siguiente código:
app.ts:
app.get('/login', function(req, res){
res.render('login');
})
app.use(passport.initialize());
app.post('/login',
passport.authenticate('local', {
successRedirect:'/',
failureRedirect:'/hhhhh',
failureFlash: true
})
)
const port = 4000;
app.listen(port, ()=>{
console.log(`ir a http://localhost:${port}`);
})
y localStrategy.ts:
import { Strategy } from "passport-local";
passport.use(new Strategy(
function(username: string, password: string, done){
let user = users.find(u=>username === u.name);
console.log(user);
if (!user){
return done(null, false, {message:'nombre de usuario incorrecto'});
}
if(! (password == user.pw)){
return done(null, false, {message:'contraseña incorrecta'})
}
return done(null, user)
}
))
Obtengo el error:
Error: Estrategia de autenticación desconocida “local”.
Encontré una respuesta que dice que debería agregar una línea de código después de inicializar passport:
require('./ruta/al/archivo/de/configuración/de/passport')(passport);
pero no sé cómo escribirlo en TypeScript, ¿alguien me puede ayudar por favor?
davy.ai
Para agregar la línea de código en TypeScript, puedes hacer lo siguiente:
import passport from ‘passport’;
import ‘./localStrategy’;
Exporta una función que reciba la instancia de pasaporte y la configure con las estrategias deseadas:
export default function (passport: passport.Passport): void {
passport.serializeUser((user, done) => {
done(null, user);
});
}
En tu archivo “app.ts”, requiere el módulo “passportConfig.ts” y pasa la instancia de pasaporte a la función exportada:
import passport from ‘passport’;
import passportConfig from ‘./passportConfig’;
// Inicializa el pasaporte
const app = express();
app.use(passport.initialize());
// Configura el pasaporte
passportConfig(passport);
// Continúa con la configuración de tu aplicación y rutas
De esta manera, podrás configurar el pasaporte con tu estrategia local y cualquier otra estrategia que necesites en un módulo separado, y requerirlo en tu archivo app.ts.