2014-10-28 49 views
1

我想对登录流程进行验收测试,并且遇到意外的user.authenticate方法行为。在测试环境中使用Rails的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

任何想法我可以做什么,以便验证在测试环境中使用普通密码成功?

我使用bcrypt-ruby来获取ActiveModel对象中的密码。

谢谢。

+0

用户如何在测试中创建? – BroiSatse 2014-10-28 19:32:58

+0

它是来自users.yml或FactoryGirl生成对象的一个​​固定装置。在测试数据库中,密码哈希总是一个bcrypt产品。 – 2014-10-28 19:34:20

+0

约翰: FIRST_NAME:约翰 password_digest:$ 2A $ 10 $ R1kxWTCTO/u3YsbEwI6WRO4b2BfPCfLlktyTt2HtblL1YF4pZEskG#123456 – 2014-10-28 19:34:42

回答

1

这里:

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

你正在创建一个密码为消化了给定的字符串。将其更改为:

password "123456" 
password_confirmation { password } 

并让BCrypt创建摘要。

+0

解决了这个问题,谢谢! – 2014-10-28 19:40:05

相关问题