绕过特定用户的Devise数据库身份验证

时间:2019-01-31 16:31:23

标签: ruby-on-rails devise

我在开发环境中为我公司的用户提供了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

有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

这听起来似乎很简单,但是您应该可以执行以下操作

...
if ldap_user.authenticated
  sign_in(ldap_user), :bypass => true)
else
  ...
end
...

我希望这对您有帮助

快乐编码