Обход аутентификации в базе данных Devise для определенных пользователей - PullRequest
0 голосов
/ 31 января 2019

У меня есть аутентификация LDAP для пользователей моей компании в среде разработки, и мне нужно, чтобы эти пользователи, прошедшие аутентификацию LDAP, могли обходить проверки аутентификации базы данных Devise.Я использую create_or_find_by для пользователей, которые проходят аутентификацию LDAP, но я либо возвращаю «Неверный адрес электронной почты или пароль» для новых пользователей, либо «Этот пароль использовался ранее» для пользователей ldap, которые уже находятся в базе данных.Я сделал эти изменения в devise / session_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 голосов
/ 14 апреля 2019

это может звучать слишком просто, но вы должны быть в состоянии сделать что-то вроде этого

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

Я надеюсь, что это поможет

Счастливое кодирование

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...