-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathauth-jwt.middleware.ts
47 lines (44 loc) · 1.81 KB
/
auth-jwt.middleware.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import { Injectable, NestMiddleware } from '@nestjs/common';
import { JwtService } from '@nestjs/jwt';
import { InjectRepository } from '@nestjs/typeorm';
import { NextFunction, Request, Response } from 'express';
import { Member } from 'src/members/entities/members.entity';
import { Repository } from 'typeorm';
@Injectable()
export class JwtMiddleware implements NestMiddleware {
constructor(
private readonly jwtService: JwtService,
@InjectRepository(Member)
private readonly member: Repository<Member>,
) {}
async use(req: Request, res: Response, next: NextFunction) {
try {
if ('authorization' in req.headers) {
const token = req.headers['authorization']
.toString()
.split(' ')[1];
const decoded = this.jwtService.verify(token);
if (typeof decoded === 'object') {
req.headers['x-jwt-decoded'] = JSON.stringify(decoded);
if (decoded.hasOwnProperty('mbrSeq')) {
const member = await this.member.findOne({
mbrSeq: decoded.mbrSeq,
});
if (!member) {
throw new Error(
`Cannot find Member by mbrSeq(${decoded.mbrSeq}).`,
);
}
req.headers['x-member'] = JSON.stringify(member);
}
}
}
} catch (error) {
console.log(`From JwtMiddleWare: ${error.message}`);
req.headers['x-jwt-decoded'] = req.headers['x-jwt-decoded'] ?? null;
req.headers['x-member'] = req.headers['x-member'] ?? null;
} finally {
next();
}
}
}