반응형
"authenticate_user!"의 구현은 어디에 있습니까? 방법?
authenticate_user!
방법의 구현은 어디에 있습니까 ?
나는 그것을 찾고 있었지만 지금까지 찾지 못했습니다.
그것에서의 lib/devise/controllers/helpers.rb
1 하고 (사용자 만 가능한 접미사 중 하나 인) 동적으로 생성된다 :
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
반응형
'developer tip' 카테고리의 다른 글
MongoDB는 배열을 어떻게 색인합니까? (0) | 2020.11.15 |
---|---|
ImportError : 이름이 지정된 모듈 없음-Python (0) | 2020.11.15 |
부모 div 자동 크기를 자식 div의 너비로 만드는 방법 (0) | 2020.11.15 |
Microsoft.AspNet.Identity.EntityFramework.IdentityUser에서 ID 유형을 변경하는 방법 (0) | 2020.11.15 |
React.JS로 입력 값을 올바르게 검증하는 방법은 무엇입니까? (0) | 2020.11.15 |