在 nestjs bcrypt 中总是使用 jwt 令牌返回 true

问题描述 投票:0回答:1

在我们的 rest api 中,当有人登录时,他的 jwt 刷新令牌在使用 bcrypt 加密后存储在数据库中,当用户想要获取新的访问令牌时,api 将通过比较来检查刷新令牌是否仍在数据库中来自标头和数据库的 jwt,但它始终返回 true

Nestjs + prisma + postgres

import * as bcrypt from 'bcrypt';
export function encryptData(data: string) {
    return bcrypt.hashSync(data, bcrypt.genSaltSync());
}
export function compareData(data: string, hashed: string) {
    return bcrypt.compareSync(data, hashed);
}

这是刷新令牌被推送到数据库

refreshTokens: Array<string>
async pushNewRefreshToken(refreshToken: string, userId: number) {
    return this.prismaService.users.update({
        data: {
            refreshTokens: {
                push: encryptData(refreshToken),
            },
        },
        where: { userId },
    });
}

这就是我们比较的地方

async checkRefreshToken(refreshToken: string, userId: number) {
    const user = await this.getUserService.getUserById(userId);
    if (user.refreshTokens) {
        for (const token of user.refreshTokens) {
            if (compareData(refreshToken, token)) {
                Logger.log('Token match')
                return true;
            }
        }
    }
    return false;
}

我试图注销所有内容,但我不明白为什么这不起作用

nestjs prisma bcrypt
1个回答
0
投票

Bcrypt 的方法是异步的,它们返回

Promise
s。
Promise
truthy
,无论其结果如何,只需进行
!!promise
检查。需要
await
promise 的结果才能知道是不是同一个token

© www.soinside.com 2019 - 2024. All rights reserved.