Ruby on rails 4 设计:如何从数据库中获取用户密码
我正在为用户登录编写Cumber测试 我有这样的场景背景,可以将用户添加到数据库中Ruby on rails 4 设计:如何从数据库中获取用户密码,ruby-on-rails-4,devise,Ruby On Rails 4,Devise,我正在为用户登录编写Cumber测试 我有这样的场景背景,可以将用户添加到数据库中 User.create!( :email => email, :password => password, :password_confirmation => password ) 那么,为什么在我的后续步骤中,我得到@user.password nil @user = User.find_by :email => "some@email.co
User.create!(
:email => email,
:password => password,
:password_confirmation => password
)
那么,为什么在我的后续步骤中,我得到@user.password nil
@user = User.find_by :email => "some@email.com"
...
fill_in('Email', :with => @user.email)
fill_in('Password', :with => @user.password)
...
Desive最初通过加密存储原始密码。
加密的\u密码(型号中的字段名)存储在数据库中
现在,当您调用User.find_by:email=>时some@email.com“
password
字段不存在。password
不是型号用户中的字段。它是模型中存在的一个实例变量,仅在您提交登录/注册
表单时设置。在您的情况下,您试图在登录之前访问密码字段
,因此,未设置实例变量,您得到的密码
为nil
如果您想了解更多详细信息,可以查看的实际实现。有关更多信息,请查看wiki页面
正如Kirti所指出的,在用户模型中,尤其是在纯文本中,您无权访问作为属性的密码
如果要测试登录名,请将密码字段作为变量保留,或者在该测试中创建用户
Given /^I am a new, authenticated user$/ do
email = 'testing@man.net'
password = 'secretpass'
User.create!(
:email => email,
:password => password,
:password_confirmation => password
)
visit '/users/sign_in'
fill_in "user_email", :with => email
fill_in "user_password", :with => password
click_button "Sign in"
end
如果以后确实需要查找用户(@user=user.find_by
)并填写密码,则需要将密码作为变量保留在测试范围之外