feat: refresh token

This commit is contained in:
Abdalhamid Alhamad
2024-12-19 16:25:39 +03:00
parent ea60ac3d7b
commit 93f5d83825
4 changed files with 35 additions and 1 deletions

View File

@ -19,7 +19,7 @@ import {
import { VerifyUserRequestDto } from '../dtos/request/verify-user.request.dto';
import { User } from '../entities';
import { GrantType, Roles } from '../enums';
import { ILoginResponse } from '../interfaces';
import { IJwtPayload, ILoginResponse } from '../interfaces';
import { removePadding, verifySignature } from '../utils';
import { DeviceService } from './device.service';
import { UserService } from './user.service';
@ -197,6 +197,22 @@ export class AuthService {
await this.juniorTokenService.invalidateToken(body.qrToken);
}
async refreshToken(refreshToken: string): Promise<[ILoginResponse, User]> {
try {
const isValid = await this.jwtService.verifyAsync<IJwtPayload>(refreshToken, {
secret: this.configService.getOrThrow('JWT_REFRESH_TOKEN_SECRET'),
});
const user = await this.userService.findUserOrThrow({ id: isValid.sub });
const tokens = await this.generateAuthToken(user);
return [tokens, user];
} catch (error) {
throw new BadRequestException('AUTH.INVALID_REFRESH_TOKEN');
}
}
private async loginWithPassword(loginDto: LoginRequestDto, user: User): Promise<ILoginResponse> {
const isPasswordValid = bcrypt.compareSync(loginDto.password, user.password);