2014-01-22 1 views
2

OmniAuth를 GitHub 전략과 함께 사용하여 프로젝트에 대한 사용자 인증을 처리하고 있습니다. Rails 서버에 직접 액세스 할 때 모든 것이 제대로 작동합니다. 나는 최근 개발 프론트 엔드와 백엔드 서버 사이에서 프록 싱을 처리하기 위해 Nginx를 설정했다. 내가 /auth/github를 방문 할 때 이제 OmniAuth는 GitHub의에 대한 요청을 발사하지만, 다음과 콜백 실패 : 내가 올바른 URL에 GitHub의에 내 응용 프로그램의 설정에서 콜백 URL을 설정 한Nginx를 통해 프록시 할 때 OmniAuth가있는 CallbackError

Started GET "/auth/github/callback?error=redirect_uri_mismatch" for 127.0.0.1 at 2014-01-22 11:54:35 -0800 
I, [2014-01-22T11:54:35.365773 #13656] INFO -- omniauth: (github) Callback phase initiated. 
E, [2014-01-22T11:54:35.366091 #13656] ERROR -- omniauth: (github) Authentication failure! redirect_uri_mismatch: OmniAuth::Strategies::OAuth2::CallbackError, redirect_uri_mismatch 
E, [2014-01-22T11:54:35.366149 #13656] ERROR -- omniauth: (github) Authentication failure! invalid_credentials: OmniAuth::Strategies::OAuth2::CallbackError, redirect_uri_mismatch 

그것은 분명히을 만들고있다 이 신비한 것만으로도 올바르게 요청하십시오 redirect_uri_mismatch. 내가 Nginx의 구성과 상대 멍청한 놈 오전하지만

server { 
    listen  8080; 
    server_name localhost; 

    location/{ 
     proxy_pass http://localhost:9000; 
    } 

    location /api/ { 
     proxy_pass http://localhost:3000; 
    } 

    location /auth/ { 
     proxy_pass http://localhost:3000; 
    } 
} 

난 정말이 작동하지 않아야하는 이유 좋은 이유를 볼 수 없습니다 :

여기 내 Nginx에 서버 블록입니다.

답변

4

좋아, 그럼 여기서 문제는 내가 제대로 헤더를 설정하지 않았다는 것입니다. 내 Nginx 설정에서 내 위치 블록에 다음을 추가하면 다음을 수정했습니다.

location /api/ { 
    proxy_set_header Host $http_host; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header Client-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $remote_addr; 
    proxy_pass http://localhost:3000; 
} 
관련 문제