2013-02-05 2 views
3

devise/omniauth를 사용하여 Facebook에 대한 내 Rails 앱을 인증하고 있습니다. callback_path을 사용자 지정 항목으로 변경하려고하지만 아무런 설정을하지 않아도 omniauth.auth 요청 변수가 nil로 반환됩니다.Facebook 인증이 사용자 정의 콜백 경로로 작동하지 않습니다.

Devise.setup do |config |  
    require "omniauth-facebook" 
    config.omniauth :facebook, 
    ENV['FACEBOOK_APP_ID'], 
    ENV['FACEBOOK_APP_SECRET'], 
    scope: "email", 
    :setup => lambda { |env| 
     env['omniauth.strategy'].options[:callback_path] = "user/auth/facebook/callback" 
    } 
end 

난 후, 인증 작업을 :callback_path를 설정하지 않고 내가 다시 데이터를 얻을 경우 : 나는 그것을 설정하지 않는 경우 예를 들어, 여기에 내가 정확한 값으로 callback_path를 설정하고있어 그것은이다 omniauth.auth 요청 변수 그러나 콜백에 대한 특성 전달을 지원해야하므로 재정의해야합니다.

나는 무엇이 잘못 될지 알기 위해 Omniauth::Strategy code을 살펴 봤지만 잘못된 것이 무엇인지 알 수 없습니다.

내 질문 : 왜이 ​​

  • 작동하지 않습니다?
  • 문제를 해결하는 더 좋은 방법이 있습니까?

답변

2

param은 데이터를 전달하는 데 사용되지 않아야합니다 (실제로 생각해 보면 데이터로 타사를 신뢰하고 있습니다!). 이 매개 변수는 CSRF 공격을 완화하는 용도로만 사용됩니다.

그래서 당신이 무엇을해야하는지,과 같이, 당신은 링크에 원하는 PARAM을 전달할 수 있습니다 : 것 automatically add that data to the session과에

link_to user_omniauth_authorize_path(:facebook, :some_key => 'some_data') 

Omniauth을 콜백 remove that data from the session, 당신은 다음과 같이 액세스셔서 것이다

request.env['omniauth.params']['some_key'] 
+0

변수를 전달하기 위해 상태를 사용했지만 결국 callback_path를 재정의 할 수없는 이유는 여전히 이해할 수 없습니다. 문서에 따르면, 그것이 정확히 사용 된 것으로되어 있습니다. –

+1

실제로, 나는 [Setup Phase Omniauth wiki] (https://github.com/intridea/omniauth/wiki/Setup-Phase)를 보았는데, 당신이 시도한 것과 일치하는 것처럼 보였다. Btw, config.omniauth : facebook, ENV [ 'FACEBOOK_APP_ID'], ENV [ 'FACEBOOK_APP_SECRET'], : callback_path => "user/auth/facebook/callback"'시도 했습니까? – Ashitaka

+0

아니요,하지만 제안 해 주셔서 감사합니다. –

관련 문제