developer tip

"authenticate_user!"의 구현은 어디에 있습니까?

copycodes 2020. 11. 15. 11:27
반응형

"authenticate_user!"의 구현은 어디에 있습니까? 방법?


authenticate_user!방법의 구현은 어디에 있습니까 ?

나는 그것을 찾고 있었지만 지금까지 찾지 못했습니다.


그것에서의 lib/devise/controllers/helpers.rb1 하고 (사용자 만 가능한 접미사 중 하나 인) 동적으로 생성된다 :

def self.define_helpers(mapping) #:nodoc:
    mapping = mapping.name

    class_eval <<-METHODS, __FILE__, __LINE__ + 1
      def authenticate_#{mapping}!(opts={})
        opts[:scope] = :#{mapping}
        warden.authenticate!(opts) if !devise_controller? || opts.delete(:force)
      end

      def #{mapping}_signed_in?
        !!current_#{mapping}
      end

      def current_#{mapping}
        @current_#{mapping} ||= warden.authenticate(:scope => :#{mapping})
      end

      def #{mapping}_session
        current_#{mapping} && warden.session(:#{mapping})
      end
    METHODS

    ActiveSupport.on_load(:action_controller) do
      helper_method "current_#{mapping}", "#{mapping}_signed_in?", "#{mapping}_session"
    end
  end

레일에 장치를 추가 할 때 일반적으로 다음을 추가합니다 config/routes.rb.

devise_for :user

이것은 Devise Mapper 클래스에 정의되어 있습니다.

Devise.add_mapping모든 리소스에 대한 호출 devise_for

Devise 모듈의 add_mapping 메서드는 여기정의 되어 있으며 나중에 다른 답변에서 설명한대로 define_helpers정의하는을 호출 authenticate합니다.


그것은 여기에 몇 가지 메타 프로그래밍을 사용하여 선언 있어요 - https://github.com/plataformatec/devise/blob/master/lib/devise/controllers/helpers.rb#L46-49

class_eval <<-METHODS, __FILE__, __LINE__ + 1
  def authenticate_#{mapping}!(opts={})
    opts[:scope] = :#{mapping}
    warden.authenticate!(opts) if !devise_controller? || opts.delete(:force)
  end
  ...
end

참고 URL : https://stackoverflow.com/questions/9272272/where-is-devise-implementation-of-authenticate-user-method

반응형