2026-05-13 17:31:50 +08:00
|
|
|
import * as crypto from 'crypto';
|
|
|
|
|
import { Injectable } from '@nestjs/common';
|
|
|
|
|
import { JwtService } from '@nestjs/jwt';
|
|
|
|
|
|
|
|
|
|
@Injectable()
|
|
|
|
|
export class TokenService {
|
|
|
|
|
constructor(private readonly jwtService: JwtService) {}
|
|
|
|
|
|
2026-05-17 00:39:46 +08:00
|
|
|
generateAccessToken(user: { id: string; email?: string | null; role?: string | null }): Promise<string> {
|
2026-05-13 17:31:50 +08:00
|
|
|
return this.jwtService.signAsync({
|
2026-05-17 00:39:46 +08:00
|
|
|
sub: user.id,
|
2026-05-13 17:31:50 +08:00
|
|
|
email: user.email,
|
|
|
|
|
role: user.role,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
generateRefreshToken(): { token: string; hash: string } {
|
|
|
|
|
const token = crypto.randomBytes(48).toString('hex');
|
|
|
|
|
const hash = crypto.createHash('sha256').update(token).digest('hex');
|
|
|
|
|
return { token, hash };
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
hashToken(token: string): string {
|
|
|
|
|
return crypto.createHash('sha256').update(token).digest('hex');
|
|
|
|
|
}
|
|
|
|
|
}
|