【发布时间】:2019-01-31 16:31:23
【问题描述】:
我在开发环境中为我公司的用户设置了 LDAP 身份验证,我需要能够允许这些通过 LDAP 身份验证的用户绕过 Devise 数据库身份验证检查。我一直在为通过 LDAP 身份验证的用户使用 create_or_find_by,但我要么为新用户返回“无效的电子邮件或密码”,要么为已经在数据库中的 ldap 用户返回“该密码以前使用过”。我在 devise/sessions_controller.rb 中进行了这些更改:
def create
if params[:user][:email].match?(/mycompany.com/)
ldap_user = LdapAuth.authenticate(params[:user][:email], params[:user][:password])
if ldap_user.authenticated
User.find_or_create_by(first_name: params[:user][:email]) do |user|
user.password = params[:user][:password]
user.password_confirmation = params[:user][:password]
user.role = 2
user.confirmed_at = Time.zone.now
user.confirmation_sent_at = Time.zone.now
user.unconfirmed_email = false
user.first_name = 'Ldap'
user.last_name = 'User'
user.save
end
super do |user|
user.user_session_event_logs.create username: user.email,
ip_address: user.current_sign_in_ip,
event_type: :login
end
end
else
super do |user|
user.user_session_event_logs.create username: user.email,
ip_address: user.current_sign_in_ip,
event_type: :login
end
end
end
有没有更好的方法来做到这一点?
【问题讨论】:
标签: ruby-on-rails devise