import * as passport from 'passport'; import * as passportLocal from 'passport-local'; import User, { DashUserModel } from './DashUserModel'; import { IncomingMessage } from 'webpack-dev-middleware'; const LocalStrategy = passportLocal.Strategy; // eslint-disable-next-line @typescript-eslint/no-explicit-any passport.serializeUser((req, user, done) => { done(undefined, (user as DashUserModel)?.id); }); // eslint-disable-next-line @typescript-eslint/no-explicit-any passport.deserializeUser((id, done) => { User.findById(id) .exec() .then((user: DashUserModel | null) => user && done(undefined, user)); }); // AUTHENTICATE JUST WITH EMAIL AND PASSWORD passport.use( new LocalStrategy({ usernameField: 'email', passReqToCallback: true }, (req, email, password, done) => { User.findOne({ email: email.toLowerCase() }) .then((user: DashUserModel | null) => { if (!user?.comparePassword) { done(undefined, false, { message: 'Invalid email or password' }); // invalid email } else { user.comparePassword(password, (error: Error, isMatch: boolean) => { if (error) return done(error); if (!isMatch) return done(undefined, false, { message: 'Invalid email or password' }); // invalid password // valid authentication HERE return done(undefined, user); }); } }) .catch((error: Error) => done(error)); }) );