导轨 4 + 设计:验证密码



当有人接受我的网站的邀请时,发生了一些奇怪的事情,他们设置了初始密码,但将来该密码不被接受为正确。 例如,我邀请自己,然后接受邀请并将我的初始密码设置为"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

您的密码将不被接受,因为您的设计初始值设定项上的这一行:

config.password_length = 8..72

"Foobar"只有6个字符长。您是否尝试过更长的密码?这就是为什么valid_password返回false.如果要接受像"foobar"这样的密码,请更改密码验证的范围。

更新

允许password强参数,则控制器上不允许密码属性。

请注意,将每个字段添加到强参数中是非常危险的。如果您允许这样的事情,我可以轻松地将任何内容发布到您的控制器并更改敏感数据。例如,我可以更改encrypted_password,reset_password_token其他不应更改的字段。只允许你希望用户传递的参数,不允许其他参数,否则你可能会向应用暴露一个巨大的安全漏洞

。 参考。

最新更新