我想对流程中的签名进行验收测试,并且我遇到了user.authenticate
方法的意外行为。
开发环境中的身份验证按预期工作:带有电子邮件和纯密码对的POST完美地传递它。运行测试时出现问题:使用普通密码进行身份验证失败。但奇怪的是,它使用密码哈希成功。
以下是代码:
class SessionsController < ApplicationController
...
def create
user = User.find_by_email(params[:email].downcase)
logger.debug Rails.env
logger.debug "password #{params[:password]}"
logger.debug user.authenticate(params[:password]).to_yaml
...
以下是不同环境的日志:
env development
password 123456
--- !ruby/object:User
env test
password 123456
--- false
env test
password $2a$10$70AlnpaXIMHtjDUei/1HU.OSEG4WVjW6ens3jzN04bC8SOxTv2Ftm
--- !ruby/object:User
知道我可以做什么,以便在测试环境中使用普通密码验证成功?
我在ActiveModel对象中使用bcrypt-ruby
密码。
感谢。
答案 0 :(得分:1)
下面:
factory :user do
first_name "Gustav"
password { BCrypt::Password.create("123456") }
end
您正在为给定字符串创建正在摘要的密码。将其更改为:
password "123456"
password_confirmation { password }
让BCrypt创建摘要。