如何使用 Authlogic 验证密码?

How to validate password using Authlogic?

所以,基本上,我们需要 - 基于用户在 AJAX POST 中发送的 user/password,根据数据库验证它。

例如,对于用户"John",密码"HelloWhosebug1234":

crypted_password: 400c$e7d64e4751fbde73$e60fea062a3cb3ae78bc8e916a8da78ee8816b8519f4bcad95315a4c60229ac1
password_salt: EW3AY1Btb3KEZb6Z1mBu

如何在 RoR4+AuthLogic 中验证密码是否正确?

我现在正在尝试的是:

user.crypted_password == BCrypt::Password.create(user.password_salt + "HelloWhosebug", cost: 8)

应该 return 正确,但事实并非如此。

背景

我们有一个用 Rails 4 编写的遗留后端(虽然由以前的开发人员编写得很好),最近决定构建一个将使用新 REST API 的单页应用程序。现在我们专注于前端,新的 /api/v2 调用将写入当前代码库,在 Rails 中。我们不打算很快重写后端。

我们正在努力使用 user/password 对简单的 PAP(密码身份验证协议)POST 进行身份验证,以对抗遗留 Authlogic 生成的哈希值,它应该仍在生产中相当长一段时间。

Google/Whosebug 的几个小时被证明是令人沮丧的,因为我们无法找到对我们当前技能集有用的信息。

经过几次尝试,我自己找到了...

user.valid_password?("HelloWhosebug")

相关 XKCD:https://xkcd.com/979/