nodejs user authentication code example
Example 1: passport js
var GoogleStrategy = require('passport-google-oauth20').Strategy;
passport.use(new GoogleStrategy({
clientID: GOOGLE_CLIENT_ID,
clientSecret: GOOGLE_CLIENT_SECRET,
callbackURL: "http://www.example.com/auth/google/callback"
},
function(accessToken, refreshToken, profile, cb) {
User.findOrCreate({ googleId: profile.id }, function (err, user) {
return cb(err, user);
});
}
));
Example 2: express passport js
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)
})
}
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)
})
)
}
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)
}
}
)
)
}