/
auth.service.ts
71 lines (60 loc) · 1.81 KB
/
auth.service.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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import { Injectable, UnauthorizedException } from '@nestjs/common';
import { JwtService } from '@nestjs/jwt';
import { ConfigService } from '@nestjs/config';
import { User } from '../users/user.entity';
import { UsersService } from '../users/users.service';
import { LoggerService } from '../../lib/modules/logger/logger.service';
@Injectable()
export class AuthService {
constructor(
private usersService: UsersService,
private jwtService: JwtService,
private loggerService: LoggerService,
private configService: ConfigService,
) {}
async signIn(email: string, password: string) {
const user = await this.usersService.findByEmail(email);
if (!user) {
throw new UnauthorizedException();
}
const ok = await this.usersService.signin(user, password);
if (!ok) {
throw new UnauthorizedException();
}
const res = this.token(user);
return res;
}
async verifyRefreshToken(
uuid: string,
body: {
uuid: string;
refreshToken: string;
},
) {
const user = await this.usersService.findByUUID(uuid);
if (!user) {
this.loggerService.logger.info(`id: ${uuid}. user is not found.`);
return undefined;
}
if (body.uuid !== user.uuid || user.refreshToken !== body.refreshToken) {
this.loggerService.logger.info(`id: ${uuid} / refresh token is invalid.`);
return undefined;
}
return this.token(user);
}
async token(user: User) {
const _user = await this.usersService.updateRefreshToken(user);
const payload = {
sub: _user.username,
refreshToken: _user.refreshToken,
};
return {
uuid: _user.uuid,
accessToken: await this.jwtService.signAsync(payload),
refreshToken: _user.refreshToken,
};
}
get sugar() {
return this.configService.get('AUTH_SUGAR');
}
}