업데이트. 일반적으로 대상 서버를 공개적으로 사용할 수 있다고 가정 할 때 임시 서버가 안전하지 않은 경우에만 확인하므로 인증 전략을 고려해야합니다.
기본적으로 귀하의 질문에 대한 대답은 - Devise는 Rails 애플리케이션에 자체 미들웨어를 추가하지 않으므로 Devise를 미들웨어로 사용할 수 없습니다. 잠재적으로 Warden 미들웨어를 사용할 수 있습니다.
Devise는 워든 (Warden) 위에 있습니다. 미들웨어 스택의 단부에 injectsWarden::Manager
미들웨어 궁리 (또한 omniauth 미들웨어 주입 수) : 다른
# Initialize Warden and copy its configurations.
config.app_middleware.use Warden::Manager do |config|
Devise.warden_config = config
end
을 그 고안 즉 이러한 sign_in
같은 헬퍼 추가 제어기와 마찬가지로, 레일 애플리케이션 레벨에서 작동한다. 그러나 미들웨어 수준 자체에서는 작동하지 않습니다. 자체
감시자는 감시자가 지연되도록 설계 here
설명되는 "지연"이다. 즉, 사용하지 않으면 은 아무 것도하지 않지만 사용하면 동작으로 바뀌고 랙 기반 응용 프로그램의 인증을 허용하는 기본 메커니즘을 제공합니다.
Devise가 어떻게 든 소장 님과 조종하지 않으면, 소장 님은별로 도움이되지 않습니다. Warden이하는 일은 embedding 그 자체로서 다른 미들웨어 (및 Rails 응용 프로그램)에서도 env 변수에 액세스 할 수 있습니다. 이 인스턴스를 사용하십시오.
미들웨어에 소장을 사용하려면
result = catch(:warden) do
@app.call(env)
end
, 당신은 미들웨어에 포함해야합니다 :
env['warden'] = Proxy.new(env, self)
소장은 또한 다른 미들웨어가 (또는 최종 레일 응용 프로그램에서) 던질 수있는 특별한 소장 예외 수신 이전 (대상 미들웨어보다 먼저). 그러면 교도관을 사용할 수있게 될 것입니다.
교도소 source의 의견에 따르면, 세션 생성 미들웨어 (예 : 이전) 이후에 포함되어야합니다.ActionDispatch::Session::CookieStore
:
미들웨어 미들웨어 랙 환경 해시 세션
감시자 accessor 내로 인증 대상을 주입 상류 세션이 있다는 필요 랙 인증을위한 미들웨어 :
def session
env["rack.session"] || {}
end
Pls는 앱에 대해 Devise (및 기본 워든)를 구성하는 방법에 대한 세부 정보를 추가합니다. 기본적으로 Warden :: Manager 미들웨어는 middlewares 스택의 [end] (https://github.com/plataformatec/devise/blob/e01fdba557f0da3c9a528011edee5b4e0989722d/lib/devise/rails.rb#L8)에 추가됩니다. 랙 : :실행 시간. 따라서 아직 코드에서 사용할 수 없습니다. –