Package breakdown - initial commit 1.0.0
This commit is contained in:
23
lib/passport/index.ts
Normal file
23
lib/passport/index.ts
Normal file
@@ -0,0 +1,23 @@
|
||||
import passport from 'koa-passport';
|
||||
import { Types } from 'mongoose';
|
||||
|
||||
import { AuthDocument } from '@mifi/services-common/lib/db/schema/auth';
|
||||
import { readOneByRecord } from '@mifi/services-common/lib/db/dao/readOneByRecord';
|
||||
import { readOneById } from '@mifi/services-common/lib/db/dao/readOneById';
|
||||
|
||||
import LocalStrategy from './strategies/local';
|
||||
import JwtStrategy from './strategies/jwt';
|
||||
|
||||
passport.use(LocalStrategy);
|
||||
passport.use(JwtStrategy);
|
||||
|
||||
passport.serializeUser((user, done) => {
|
||||
done(null, (user as AuthDocument).record || (user as AuthDocument).id);
|
||||
});
|
||||
|
||||
passport.deserializeUser(async (id, done) => {
|
||||
const user = await readOneByRecord(<Types.ObjectId>id).catch(async () => await readOneById(<Types.ObjectId>id));
|
||||
done(user ? null : 'user not found', user);
|
||||
});
|
||||
|
||||
export default passport;
|
||||
17
lib/passport/strategies/jwt.ts
Normal file
17
lib/passport/strategies/jwt.ts
Normal file
@@ -0,0 +1,17 @@
|
||||
import { ExtractJwt, Strategy as JwtStrategy } from 'passport-jwt';
|
||||
|
||||
import { readOneByRecord } from '@mifi/services-common/lib/db/dao/readOneByRecord';
|
||||
|
||||
import { JWT_SECRET } from '../../constants/env';
|
||||
|
||||
const opts = {
|
||||
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
|
||||
secretOrKey: JWT_SECRET,
|
||||
issuer: process.env.JWT_ISSUER,
|
||||
audience: process.env.JWT_AUDIENCE,
|
||||
};
|
||||
|
||||
export default new JwtStrategy(opts, async ({ sub }, done) => {
|
||||
const auth = await readOneByRecord(sub);
|
||||
return done(null, auth || false);
|
||||
});
|
||||
9
lib/passport/strategies/local.ts
Normal file
9
lib/passport/strategies/local.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
// eslint-disable-next-line import/named
|
||||
import { Strategy as LocalStrategy } from 'passport-local';
|
||||
|
||||
import { authenticate } from '@mifi/services-common/lib/db/api/authenticate';
|
||||
|
||||
export default new LocalStrategy(async (username: string, password: string, done: any) => {
|
||||
const user = await authenticate(username, password);
|
||||
done(null, user);
|
||||
});
|
||||
Reference in New Issue
Block a user