hash refresh token

This commit is contained in:
2025-12-06 22:51:34 +03:30
parent 46470f73d0
commit 6c62c8badc
2 changed files with 11 additions and 4 deletions
@@ -10,7 +10,7 @@ export enum RefreshTokenType {
@Entity({ tableName: 'refreshtokens' }) @Entity({ tableName: 'refreshtokens' })
export class RefreshToken extends BaseEntity { export class RefreshToken extends BaseEntity {
@Property({ type: 'varchar', length: 255 }) @Property({ type: 'varchar', length: 255 })
token!: string; hashedToken!: string;
@Property() @Property()
ownerId!: string; ownerId!: string;
+10 -3
View File
@@ -1,4 +1,4 @@
import { randomBytes } from 'node:crypto'; import { createHash, randomBytes } from 'node:crypto';
import { EntityManager } from '@mikro-orm/postgresql'; import { EntityManager } from '@mikro-orm/postgresql';
import { Injectable, Logger, UnauthorizedException } from '@nestjs/common'; import { Injectable, Logger, UnauthorizedException } from '@nestjs/common';
import { ConfigService } from '@nestjs/config'; import { ConfigService } from '@nestjs/config';
@@ -49,8 +49,10 @@ export class TokensService {
const refreshExpire = this.configService.getOrThrow<number>('REFRESH_TOKEN_EXPIRE'); const refreshExpire = this.configService.getOrThrow<number>('REFRESH_TOKEN_EXPIRE');
const expiresAt = dayjs().add(refreshExpire, 'day').toDate(); const expiresAt = dayjs().add(refreshExpire, 'day').toDate();
const hashedToken = this.hashToken(refreshToken);
const token = this.em.create(RefreshToken, { const token = this.em.create(RefreshToken, {
token: refreshToken, hashedToken,
ownerId, ownerId,
restId, restId,
type, type,
@@ -61,7 +63,8 @@ export class TokensService {
} }
async refreshToken(oldRefreshToken: string) { async refreshToken(oldRefreshToken: string) {
const token = await this.em.findOne(RefreshToken, { token: oldRefreshToken }); const hashedToken = this.hashToken(oldRefreshToken);
const token = await this.em.findOne(RefreshToken, { hashedToken });
if (!token) throw new UnauthorizedException(AuthMessage.INVALID_REFRESH_TOKEN); if (!token) throw new UnauthorizedException(AuthMessage.INVALID_REFRESH_TOKEN);
@@ -97,4 +100,8 @@ export class TokensService {
private generateRefreshToken() { private generateRefreshToken() {
return randomBytes(32).toString('hex'); return randomBytes(32).toString('hex');
} }
private hashToken(token: string): string {
return createHash('sha256').update(token).digest('hex');
}
} }