Rails 4 + Devise:验证密码

时间:2017-07-05 17:39:52

标签: ruby-on-rails devise

当有人接受我的网站邀请,他们设置了他们的初始密码时,会发生奇怪的事情,但此后密码将被接受为正确。例如,我邀请自己,然后接受邀请并将我的初始密码设置为“foobar”。

当我打开控制台并检查密码时,我看到:

User.find_by(email: "myemail@gmail.com").valid_password?("foobar")
=> false

有没有办法查看我的未加密密码,以便我可以诊断它可能被设置的位置或其他一些方法来查找密码的更新位置?

设计初始化程序:

Devise.setup do |config|

  config.secret_key = '*****'

  config.mailer_sender = 'admin@foobar.com'

  config.mailer = 'CustomDeviseMailer'
  require 'devise/orm/active_record'

  config.case_insensitive_keys = [:email]
  config.strip_whitespace_keys = [:email]
  config.skip_session_storage = [:http_auth]
  config.stretches = Rails.env.test? ? 1 : 10
  config.reconfirmable = true
  config.expire_all_remember_me_on_sign_out = true
  config.password_length = 8..72
  config.reset_password_within = 6.hours
  config.sign_out_via = :delete
end

设计不可用的初始化程序:

Devise::InvitationsController.class_eval do
  def update_resource_params
    params.require(resource_name).permit( 
            :email,:encrypted_password,:reset_password_token,:reset_password_sent_at,:remember_created_at,:sign_in_count,:current_sign_in_at,:last_sign_in_at,:current_sign_in_ip,:last_sign_in_ip,:created_at,:updated_at,:admin,:invitation_token,:invitation_created_at,:invitation_sent_at,:invitation_accepted_at,:invitation_limit,:invited_by_id,:invitations_count,:invited_by_type,:employee,:is_client,:location_id,:user_type, :location_id
    )
  end
end

1 个答案:

答案 0 :(得分:1)

您的密码不会被接受,因为您的设备初始化程序中的这一行:

config.password_length = 8..72

" foobar的"只有6个字符长。你尝试过更长的密码吗?这就是valid_password返回false的原因。如果您想接受像" foobar"等密码。更改密码验证的范围。

<强>更新

在您的强参数上允许password,您在控制器上不允许使用密码属性。

注意,将每个字段添加到强参数中非常危险。如果您允许这样的内容,我可以轻松地向控制器发布任何内容并更改敏感数据。例如,我可以更改encrypted_pa​​ssword,reset_password_token以及其他永远不应更改的字段。只允许您希望用户传递的参数,其他任何内容,或者您​​可以为您的应用程序暴露一个巨大的安全漏洞。 Reference