Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 设计:如何从数据库中获取用户密码_Ruby On Rails 4_Devise - Fatal编程技术网

Ruby on rails 4 设计:如何从数据库中获取用户密码

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

我正在为用户登录编写Cumber测试

我有这样的场景背景,可以将用户添加到数据库中

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
)并填写密码,则需要将密码作为变量保留在测试范围之外