2013-02-07 7 views
3

Google, Facebook 및 전통적인 사용자 이름/암호를 통한 인증에 omniauthomniauth-identity을 사용하고 있습니다. 나는 인증이 실패한 경우를 제외하고는 모두 잘 작동한다. 오류가 발생하면 (예 : 잘못된 암호를 입력 할 때) omniauth는 /auth/failure을 호출합니다. 적절한 페이지로 리디렉션하고 플래시 메시지를 표시하는 컨트롤러에 매핑했습니다. 내가 가진 문제는 플래시를 실제로 표시 할 수 없다는 것입니다. 예제 코드 :Omniauth 인증 실패 콜백 처리

routes.rb에서 :이 호출하는 컨트롤러에서

match "/auth/failure" => "sessions#failure" 

:

def failure 
    redirect_to root_url, alert: "Authentication failed, please try again." 
end 

나는 플래시 인해 일을 무엇이든 omniauth의 조합 리디렉션 손실되고있다 생각합니다. 성공적인 로그인 메시지처럼 다른 것들을 깜박이기 때문에 뷰 코드가 정확하다는 것을 알고 있습니다. 플래쉬 메시지를 보여주기 위해 예제를 수정하는 방법에 대한 제안이나, 대체 omniauth 실패 처리 메커니즘에 대한 제안을 주시면 감사하겠습니다. 감사.

답변

-2

지난번 프로젝트에서 동일한 문제가 있습니다. 그것은 버그입니다. config/initializers/omniauth.rb에 다음 원숭이 패치를 추가하십시오.

# Omniauth failure monkey patch 
    on_failure do |env| 
    message_key = env['omniauth.error.type'] 
    origin_query_param = env['omniauth.origin'] ? "&origin=#{CGI.escape(env['omniauth.origin'])}" : "" 
    strategy_name_query_param = env['omniauth.error.strategy'] ? "&strategy=#{env['omniauth.error.strategy'].name}" : "" 
    extra_params = env['omniauth.params'] ? "&#{env['omniauth.params'].to_query}" : "" 
    new_path = "#{env['SCRIPT_NAME']}#{OmniAuth.config.path_prefix}/failure?message=#{message_key}#{origin_query_param}#{strategy_name_query_param}#{extra_params}" 
    Rack::Response.new(["302 Moved"], 302, 'Location' => new_path).finish 
    end 
+0

감사합니다. 아마도 나는이 적용하는 방법을 오해하고 있지만 ('에서 [omniauth 자주 묻는 질문]에서 redirect_after_failure' (https://github.com/intridea/omniauth/wiki/FAQ) 내가 현재 가지고있는에서 행동에는 다르지 않을 것으로 보인다) - 플래시 메시지가 없습니다. – SingleShot