当有人接受我的网站邀请,他们设置了他们的初始密码时,会发生奇怪的事情,但此后密码将被接受为正确。例如,我邀请自己,然后接受邀请并将我的初始密码设置为“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
答案 0 :(得分:1)
您的密码不会被接受,因为您的设备初始化程序中的这一行:
config.password_length = 8..72
" foobar的"只有6个字符长。你尝试过更长的密码吗?这就是 valid_password
返回false
的原因。如果您想接受像" foobar"等密码。更改密码验证的范围。
<强>更新强>
在您的强参数上允许password
,您在控制器上不允许使用密码属性。
注意,将每个字段添加到强参数中非常危险。如果您允许这样的内容,我可以轻松地向控制器发布任何内容并更改敏感数据。例如,我可以更改encrypted_password,reset_password_token以及其他永远不应更改的字段。只允许您希望用户传递的参数,其他任何内容,或者您可以为您的应用程序暴露一个巨大的安全漏洞。 Reference