Код: Выделить всё
async refreshTokens(userId: number, rt: string, res: Response): Promise {
const admin = await this.adminService.findAdminById(userId)
if (!admin || !admin.refreshToken) throw new ForbiddenException('Access denied')
console.log(rt, 'service method')
const rtMatches = await argon2.verify(admin.refreshToken, rt)
if (!rtMatches) throw new ForbiddenException('Access denied')
const tokens = await this.createTokens(admin.id, admin.userName)
await this.updateRefreshToken(admin.id, tokens.refresh_token)
res.cookie('refresh_token', `${tokens.refresh_token}`, {
httpOnly: true
})
return {
access_token: tokens.access_token
}
}
Я использую почтальон Чтобы вызвать конечные точки. rtmatches возвращает true . Затем я проверяю свою базу данных MySQL и хэш токена обновления, изменившись.
и проблема возникает, когда я снова называю метод обновленных поток , используя первый токен, который был переписан новым токеном ранее и rtmatches < /code> значение должно быть false , но это правда. И я могу называть эту конечную точку бесконечно, и rtmatches всегда останется правдой.
Для получения дополнительного контекста:
Код: Выделить всё
async updateRefreshToken(userId: number, rt: string) {
const hash = await this.hashData(rt)
await this.adminService.updateRefreshToken(userId, hash)
}
async hashData(data: string) {
return await argon2.hash(data)
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... jwt-tokens