Ruby on rails RubyonRails身份验证函数中发生了什么
我一直在深入研究rails的身份验证功能 实际上,默示似乎非常简单,但肯定会有更多的魔法发生。我希望有人能解释以下结果Ruby on rails RubyonRails身份验证函数中发生了什么,ruby-on-rails,authentication,Ruby On Rails,Authentication,我一直在深入研究rails的身份验证功能 实际上,默示似乎非常简单,但肯定会有更多的魔法发生。我希望有人能解释以下结果 BCrypt::Password.new('$2a$10$Pgxl1C8Ceg5WN5FJyP4OOOI/SiRZ0oujvWEWdNg95xp2qcPn6aP2q') == 'test1234567' => true BCrypt::Password.new('$2a$10$Pgxl1C8Ceg5WN5FJyP4OOOI/SiRZ0oujvWEWdNg95xp2qcP
BCrypt::Password.new('$2a$10$Pgxl1C8Ceg5WN5FJyP4OOOI/SiRZ0oujvWEWdNg95xp2qcPn6aP2q') == 'test1234567'
=> true
BCrypt::Password.new('$2a$10$Pgxl1C8Ceg5WN5FJyP4OOOI/SiRZ0oujvWEWdNg95xp2qcPn6aP2q')
=> "$2a$10$Pgxl1C8Ceg5WN5FJyP4OOOI/SiRZ0oujvWEWdNg95xp2qcPn6aP2q"
"$2a$10$Pgxl1C8Ceg5WN5FJyP4OOOI/SiRZ0oujvWEWdNg95xp2qcPn6aP2q" == 'test1234567'
=> false
第一条语句中的密码是正确的。看起来它正在对哈希密码的BCrypt::Password.new进行评估,并将其与给定字符串进行比较
为了测试这一点,我在第二条语句中计算了BCrypt::Passowrd.new,然后在第三条语句中将其与正确的密码进行了比较。这返回false。。。我试图避开正斜杠,但结果相同
有人能解释一下这里发生了什么事吗
下面是实现身份验证的链接 让我们把它一句一句地分解
password.inspect
=> "\"$2a$10$Pgxl1C8Ceg5WN5FJyP4OOOI/SiRZ0oujvWEWdNg95xp2qcPn6aP2q\""
第一条语句是ok,它初始化BCrypt::Password
对象并将其与字符串进行比较BCrypt::Password
实现,它根据临时BCrypt::Password
对象检查对象(在本例中为字符串)
在第二条语句中,与第一条语句一样,您正在初始化BCrypt::Password
对象,但没有将其保存到变量中,并且该对象未被引用和未使用。语句的输出只是返回对象上.inspect
结果的IRB
最后,第三条语句看起来像是在比较两个不相等的字符串,而不是任何BCrypt::Password
对象
要修复您的第二个和第三个语句,使其协同工作,您需要执行以下操作:
# Updated second statement
password = BCrypt::Password.new('$2a$10$Pgxl1C8Ceg5WN5FJyP4OOOI/SiRZ0oujvWEWdNg95xp2qcPn6aP2q')
=> "$2a$10$Pgxl1C8Ceg5WN5FJyP4OOOI/SiRZ0oujvWEWdNg95xp2qcPn6aP2q"
# Updated third statement
password == 'test1234567'
=> true
实际上,您可以自己调用.inspect
onpassword
,您将看到与IRB为第二条语句返回的结果类似的结果
password.inspect
=> "\"$2a$10$Pgxl1C8Ceg5WN5FJyP4OOOI/SiRZ0oujvWEWdNg95xp2qcPn6aP2q\""
嘿,马修,谢谢你的回复。我故意在第二条语句中打印出BCrypt::Password的结果,然后在第三条语句中复制/粘贴它。我不知道打印出来的是密码对象的
.inspect
功能。另外,您提出的另一个要点是BCrypt::Password实现了比较运算符。我不清楚为什么会这样,但这是有道理的。再次感谢您的回复