Невозможно использовать собственную стратегию разработки - PullRequest
0 голосов
/ 11 сентября 2018

Я использую devise для добавления слоя аутентификации в моем приложении rails. Я должен настроить аутентификацию LDAP. Поэтому я создал свою собственную стратегию, я буквально следовал этой вики-статье . Однако я получил эту ошибку:

11: from /home/mcdostone/X/app/models/user.rb:3:in `<main>'
10: from /home/mcdostone/X/app/models/user.rb:4:in `<class:User>'
...
/home/mcdostone/.rvm/gems/ruby-2.5.1/gems/bootsnap-1.3.2/lib/bootsnap/load_path_cache/core_ext/active_support.rb:74:in `block in load_missing_constant': uninitialized constant Devise::Models::LdapAuthenticatable (NameError)
class User < ApplicationRecord
  devise :ldap_authenticatable
end

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Спасибо, Сри, за вашу помощь. Теперь он работает правильно! Вот мое решение:

# config/initializers/ldpa_authenticatable.rb

module Devise
  module Models
    module LdapAuthenticatable
      extend ActiveSupport::Concern
    end
  end

  module Strategies
    class LdapAuthenticatable < Authenticatable
      # This method first checks if the user is present in the database.
      # After that, we authenticate the user thanks to the LDAP server
      def authenticate!
        if params[:user]
          user = User.find_by(username: username)
          if user.nil?
            return fail(:invalid_login)
          else
            ldap = Ldap.client
            ldap_username = Ldap.get_login(username)
            puts ldap_username.inspect
            ldap.authenticate ldap_username, password
            if ldap.bind
              success!(user)
            else
              return fail(:invalid_login)
            end
          end
        end
      end

      def username
        params[:user][:username]
      end

      def password
        params[:user][:password]
      end
    end
  end
end

Warden::Strategies.add(:ldap_authenticatable, Devise::Strategies::LdapAuthenticatable)
Devise.add_module(:ldap_authenticatable,
                  route: :session, ## This will add the routes, rather than in the routes.rb
                  strategy: true,
                  controller: :sessions,
                  model: "ldap_authenticatable")
0 голосов
/ 12 сентября 2018

Похоже, эта вики-страница довольно устарела. Теперь вам нужен модуль LdapAuthenticatable в Devise::Models, а также Devise::Strategies.

config/initializers/ldap_authenticatable.rb

module Devise
  module Models
    module LdapAuthenticatable
      extend ActiveSupport::Concern
    end
  end

  module Strategies
    class LdapAuthenticatable < Authenticatable
      ... same as before ...
    end
  end
end

Я действительно рекомендую вам использовать этот gem , так как будет много настроек, которые вам понадобятся, чтобы он работал хорошо.

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