【发布时间】:2020-01-11 11:03:06
【问题描述】:
我刚刚为我的 REST API 实现了用户身份验证,并使用 bcrypt 进行密码散列。创建用户时,我基本上会这样做
const passwordSalt: string = await genSalt(12);
const passwordHash: string = await hash('pAsSwOrD', passwordSalt);
并将哈希值保存到数据库中。稍后当用户登录时,我将提供的密码与数据库密码哈希进行比较。
const passwordMatches: boolean = await compare('wRoNg pAsSwOrD', user.passwordHash);
我知道比较功能应该很慢以帮助抵御暴力攻击。但是比较功能需要一分钟多的时间才能完成。用户不会等待完成。那么我的代码有问题吗?
如果您需要更多信息,请告诉我。
【问题讨论】:
-
这与暴力无关。此外,代码不应该花时间来比较。查询时间检查了吗?
-
是的,调试器会立即跳转到密码比较。但随后需要一分钟才能继续前进。整个 HTTP 调用耗时 1 分 4 秒(我用 postman 测试过)
-
你有源文件吗?
-
顺便说一句。如果你想玩,这是我的 .env 文件配置
SERVER_PORT = 3000 DATABASE_TYPE = postgres DATABASE_HOST = localhost DATABASE_PORT = 5432 DATABASE_USERNAME = postgres DATABASE_PASSWORD = postgres DATABASE_NAME = api DATABASE_LOGGING = true DATABASE_SYNCHRONIZE = true NODE_ENV = development AUTHENTICATION_SALT_ROUNDS = 12 TOKEN_SECRET = secret TOKEN_EXPIRATION_IN_SECONDS = 36000