2013-05-25 4 views
1

모든 페이지의 내비게이션 메뉴에 "Facebook에서 로그인"버튼이있는 내 사이트에 facebook authentication을 사용하고 있습니다. 따라서 사용자는 페이스 북을 통해 로그인 할 수 있어야하며 한 번의 클릭으로 이전 페이지로 돌아갈 수 있어야합니다. 페이스 북은 내 사이트에서/login/facebook으로 설정된 return_uri 매개 변수를 제공하며 페이스 북 API에 대한 모든 인증을 처리한다. 그러나 일단이 논리로 끝내고 사용자를 로그인하면 원래 페이지가 어떤 것인지 알 필요가있어서 원래 페이지로 리디렉션 할 수 있습니다. 나는 나의 return_uri 매개 변수를 전달하려고했습니다Facebook 인증, return_uri 및 현지 uri

: 나는 다시 응답을받을 때

http://example.com/login/facebook?local_redir=http://example.com/users/original/page

(모든 물음표와 함께 후에 제대로 물론 인코딩 된) 그래서 원래 페이지가 무엇인지 알고있다. 액세스 토큰을 가져 오려고하면이 작업이 실패합니다. 나는 기본적으로 페이 스북에 "통과"매개 변수를 갖는 방법이 필요하지만, 여기에서는 짧게 설명하고 있습니다.

+0

왜 액세스 토큰을 가져 오려고 할 때 실패합니까? auth 대화 상자 호출과 액세스 토큰에 대한'code' 호출과 동일한 redirect_uri를 사용하고 있습니까? – Igy

+0

@Igy, 네, "인증 코드를 검증하는 동안 오류가 발생했습니다. 귀하의 redirect_uri가 OAuth 대화 요청에서 사용했던 것과 일치하는지 확인하십시오"라고 불평하고 있습니다. 그러나 나는 호출간에 URL이 동일하다는 것을 확인했습니다. local_redir을 매개 변수로 추가하지 않으면 작동합니다. – arknotts

+0

로그인 물건 등을 처리하기 위해 PHP SDK를 사용하고 있다고 가정합니다. 그렇다면 세션도 이미 마련되어 있습니다. 따라서 세션의 '원본 페이지'에 URL을 저장하여 사이트의 링크/버튼 'Facebook으로 로그인'을 클릭 한 다음 FB 로그인이 세션에서 읽은 값을 사용하여 끝나면 해당 페이지로 리디렉션 하시겠습니까? 페이스 북이 반대하는 것으로 보이는 리다이렉트 URI에서 갑자기 발생하는 추가 매개 변수로 인한 문제를 피할 수 있습니다. – CBroe

답변

0

정상적으로 작동하는 해결책을 찾았습니다. 외관상으로는 페이스 북은 GET 매개 변수 또는 URL 내에 임베디드 된 URL (제대로 인코딩 된 경우 라 할지라도)을 좋아하지 않는다. 코멘트에서하고, 기본 64 문자열로 URL을 변환뿐만 아니라 CBroe의 제안을 않았다 결합 트릭 :

HttpUtility.UrlEncode("http://example.com/login/facebook/local_redir/" + returnUrl); 

컨트롤러가 수신하는 경우 : 다음

string returnUrl = Convert.ToBase64String(
          System.Text.Encoding.ASCII.GetBytes(
           HttpContext.Current.Request.Url.ToString() 
         )); 

... 그리고는에 return_uri 매개 변수를 설정 페이스 북에서 되돌아 오는 요청은 local_redirect 다음의 URL을 디코드합니다.

string decodedRedirectUrl = System.Text.Encoding.ASCII.GetString(
             Convert.FromBase64String(
              local_redir 
            )); 
0

나는 똑같은 문제가있었습니다. 나는 모든 노력

"변경 CURLOPT_SSL_VERIFYPEER 및 CURLOPT_SSL_VERIFYHOST가 true로 trustForwarded false로 allowSignedRequest 세트, ....."그

없음 작동하지 않습니다.

최종 줄 - 내 return_uri 도메인 이름에 대문자와 소문자가있는 auth URL을 작성하기 위해 페이스 북에 전달했습니다. 인증이 완료되면 페이스 북은 브라우저를 위/아래 도메인 이름으로 되돌려 보냈지 만 fb 코드 자체에서 return_uri 매개 변수와 일치하는지 확인하기 위해 현재 URL을 작성할 때 $와 같은 내장 PHP 배열을 사용합니다 _SESSION은 소문자 버전 만 제공하므로 return_uri는 현재 URL과 실제로 일치하지 않습니다.

해결 방법 - 도메인 이름이있는 모든 곳에서 소문자로 설정하십시오.