| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- import passport from 'passport';
- import { Strategy as JwtStrategy, ExtractJwt } from 'passport-jwt';
- import { Strategy as LocalStratergy } from 'passport-local';
- import { Strategy as LocalAPIKeyStrategy } from 'passport-localapikey-update';
- import bcrypt from 'bcryptjs';
- import { getUser } from './db/user';
- const jwtOptions = {
- jwtFromRequest: ExtractJwt.fromHeader('authorization'),
- secretOrKey: process.env.JWT_SECRET,
- };
- passport.use(
- new JwtStrategy(jwtOptions, async (payload, done) => {
- try {
- const user = await getUser(payload.sub);
- if (!user) return done(null, false);
- return done(null, user);
- } catch (err) {
- return done(err);
- }
- })
- );
- const localOptions = {
- usernameField: 'email',
- };
- passport.use(
- new LocalStratergy(localOptions, async (email, password, done) => {
- try {
- const user = await getUser(email);
- if (!user) {
- return done(null, false);
- }
- const isMatch = await bcrypt.compare(password, user.password);
- if (!isMatch) {
- return done(null, false);
- }
- return done(null, user);
- } catch (err) {
- return done(err);
- }
- })
- );
- const localAPIKeyOptions = {
- apiKeyField: 'apikey',
- apiKeyHeader: 'x-api-key',
- };
- passport.use(
- new LocalAPIKeyStrategy(localAPIKeyOptions, async (apikey, done) => {
- try {
- const user = await getUser(apikey);
- if (!user) {
- return done(null, false);
- }
- return done(null, user);
- } catch (err) {
- return done(err);
- }
- })
- );
|