Files
recipe-manager/server/loaders/passport.ts
2022-11-21 17:24:44 -06:00

39 lines
1.1 KiB
TypeScript

import { Strategy as LocalStrategy } from "passport-local";
import passport from "passport";
import { Express } from "express";
import AuthService from "../auth";
import { IUserAuth } from "../schemas";
const AuthInstance = new AuthService();
export const passportLoader = async (app: Express) => {
app.use(passport.initialize());
app.use(passport.session());
passport.serializeUser((user, done) => {
process.nextTick(() => {
done(null, user);
})
})
passport.deserializeUser((user: IUserAuth, done) => {
process.nextTick(async () => {
const userData = await AuthInstance.login(user);
return userData ? done(null, userData) : done(null, false);
})
})
// sign in method with passport local strategy
passport.use(new LocalStrategy({
usernameField: 'email',
passwordField: 'password'
}, async (email, password, done) => {
try {
const response = await AuthInstance.login({ email, password });
return done(null, response);
} catch (e: any) {
return done(e);
}
}))
return passport;
}