authentiatiobn using passport.js code example

Example 1: express passport js

// my github https://github.com/restuwahyu13
const { AuthSchema } = require('../models/model.auth')
const passport = require('passport')
const JwtStrategy = require('passport-jwt').Strategy
const ExtractJwt = require('passport-jwt').ExtractJwt
const LocalStrategy = require('passport-local').Strategy

exports.passportSerialize = () => {
  return passport.serializeUser(async (user, done) => {
    if (user) {
      const { _id } = user
      const result = await AuthSchema.findById(_id).lean()
      if (!result) return done(null, false)
      return done(null, result._id)
    }
    return done(null, false)
  })
}

exports.passportDeserialize = () => {
  return passport.deserializeUser(async (id, done) => {
    if (id) {
      const user = await AuthSchema.findById(id).lean()
      if (!user) return done(null, false)
      return done(null, user)
    }
    return done(null, false)
  })
}

// passport local
exports.passportLocalStrategy = () => {
  passport.use(
    'local',
    new LocalStrategy(async (username, password, done) => {
      if (username && password) {
        const user = await AuthSchema.find({ $or: [{ username }, { email: username }] }).lean()
        const verify = AuthSchema.verifyPassword(password, user[0].password)

        if (!verify) return done(null, false)
        return done(null, user[0])
      }
      return done(null, false)
    })
  )
}

// passport jwt
exports.passportJwtStrategy = () => {
  passport.use(
    'jwt',
    new JwtStrategy(
      {
        secretOrKey: process.env.JWT_SECRET,
        jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken()
      },
      async ({ _id }, done) => {
        try {
          const user = await AuthSchema.findById(_id).lean()
          if (!user) done(null, false)
          done(null, user)
        } catch (err) {
          done(err, false)
        }
      }
    )
  )
}

Example 2: passport js

$ npm install passport-google-oauth20