2011-02-15 4 views
4

2 개 도메인에서 액세스 할 수있는 레일 응용 프로그램이 있습니다. 페이스 북은 내가 각 도메인에 페이스 북 앱을 등록하도록 요구하고 각각에 대한 자격 증명을 제공한다. Omniauth를 사용하면 응용 프로그램 시작시 설정되는 자격 증명 집합 만 지정할 수 있습니다. 그러나 요청의 호스트에 따라 다른 자격 증명을 FB에 제공해야합니다.Omniauth : 런타임에 인증 공급자 세부 정보를 설정하는 방법

이 문제는 여기에 있습니다 :

  1. 어떻게 런타임에 페이스 북의 Omniauth 자격 증명을 변경할 수 있습니까?
  2. 어떻게 페이스 북에 대한 호출을 가로 채고, 도메인을 확인하고 이에 따라 자격 증명을 설정할 수 있습니까? Omniauth가 Rack Middleware를 사용하기 때문에 필터가 작동하지 않습니다.

모든 의견을 매우 높이 평가합니다! 은 "응답되지 않은"필터에서이 문제를 제거하기 위해 의견에서 답을 복사

+0

좋아마다, 내가 여기 이렇게 지침을 찾을 않았다 https://github.com/intridea/omniauth/wiki/Dynamic-Providers 그러나, 그들은 나를 위해 작동하지 않습니다 . Omniauth는 제공자/인증 (auth) 호출을 가로 채기위한 경로를 설정하더라도 공급자에게 곧바로 간다. 나는 Omniauth와 레일 2.3.5를 사용하고있다. 0.1.6 – Nico

+0

좋아, 나는 0.2.0 버전으로 보석을 업데이트했다. .beta4와 루트는 이제 작동하지만 올바른 환경 정보를 환경 변수로 설정하더라도 인증 실패가 발생합니다. 페이 스북에 대한 인증 URL은 설정에서 자격 증명을 수동으로 설정할 때와 똑같습니다. 그건 그렇고, vars는 이제 (위키에서 말하는대로 consumer_key 및 client_secret가 아닌 client_id 및 client_secret) 호출됩니다. – Nico

+1

나는 지금 이것을 직접 풀었다. 문제는 fb 전략이 다시 액세스 토큰을 얻기 위해 fb를 다시 호출한다는 것입니다. 두 번째 호출에서 잘못된 자격 증명이 사용되었습니다 (초기화 프로그램에서 설정된 자격 증명). 따라서 OAuth2 전략을 패치하여 레일스 응용 프로그램에 다시 호출하여 두 번째 호출에 대한 런타임 자격 증명을 설정해야했습니다. 일반적으로 Omniauth 응답 양식 만 처리하는 콜백에서는 request.env [ "omniauth.auth"]가 없으면 자격 증명을 설정하고 404를 반환합니다. 그건 잘 작동하지만 동적 공급자가없는 응용 프로그램에 대한 부작용이 있습니다. – Nico

답변

0

:

은 지금이 자신을 해결했다. 문제는 fb 전략이 액세스 토큰을 얻기 위해 fb로 다시 을 호출한다는 것입니다. 이 두 번째 호출에서 잘못된 자격 증명이 사용되었습니다 (이니셜 라이저에서 설정된 자격 증명). 그래서 레일 앱을 다시 호출하여 두 번째 호출에 대한 런타임 자격 증명을 설정하도록 OAuth2 전략을 패치해야했습니다. 일반적으로 응답 양식 Omniauth 만 처리하는 콜백에서는 request.env [ "omniauth.auth"]가 없으면 자격 증명을 설정하고 404를 반환합니다. 그게 잘 작동하지만 동적 공급자가없는 애플 리케이션을위한 부작용이 있습니다.

응용 프로그램이 런타임에 자격 증명을 설정하지 않으려는 경우에도 콜백을 피하기 위해 request.env [ "omniauth.auth"]처럼 조건을 콜백에 추가해야합니다. 코드는 처음 호출 될 때 실행됩니다. 해결 방법은 아마도 Omniauth 빌더에 dynamic_provider와 같은 매개 변수를 추가하고 설정되어있는 경우에만 앱을 호출하면됩니다.

~ 대답 Nico

관련 문제