在测试环境中使用Rails的user.authenticate()的意外行为

时间:2014-10-28 18:53:42

标签: ruby-on-rails authentication activemodel bcrypt-ruby

我想对流程中的签名进行验收测试,并且我遇到了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密码。

感谢。

1 个答案:

答案 0 :(得分:1)

下面:

factory :user do 
   first_name "Gustav"
   password { BCrypt::Password.create("123456") }
end

您正在为给定字符串创建正在摘要的密码。将其更改为:

 password "123456"
 password_confirmation { password }

让BCrypt创建摘要。