3

저는 AppHarbor에서 호스팅되는 샘플 앱을 보유하고 있으며 이제는 facebook을 통해 인증을 통합하려고합니다. 그래서 그것을 구현하기 위해 Facebook.Web.Mvc 패키지를 다운로드했습니다.Facebook 랜덤 포트 OAuth + AppHarbor 해결 방법

public ActionResult Login(string returnUrl) 
    { 
     var oauthClient = new FacebookOAuthClient(FacebookApplication.Current) { RedirectUri = GetFacebookRedirectUri() }; 


     if (!string.IsNullOrWhiteSpace(returnUrl)) 
     { 
      returnUrl = Url.Action("Index", "Facebook"); 
     } 

     dynamic parameters = new ExpandoObject(); 
     parameters.scope = ExtendedPermissions; 

     var state = new { csrf_token = CalculateMD5Hash(Guid.NewGuid().ToString()), return_url = returnUrl }; 
     parameters.state = Base64UrlEncode(Encoding.UTF8.GetBytes(JsonSerializer.Current.SerializeObject(state))); 
     SetFacebookCsrfToken(state.csrf_token); 

     string s = oauthClient.GetLoginUrl(parameters).AbsoluteUri; 

     ViewBag.FacebookLoginUrl = s; 
     //new LogEvent(s).Raise(); 

     return View(new AccountModel()); 
    } 

보기 : 로컬 호스트에서

<a href="@ViewBag.FacebookLoginUrl" id="lUrl"> 
<div class="fblogin"></div> 

이 나를 위해 작동

컨트롤러, 튜토리얼을 읽은 후 나는 방법이있다. 하지만 appharbor에 업로드 할 때 생성 된 링크가 주소 + 포트 16013을 나타냅니다 (지원이 항상 임의의 포트라고 말함). 그래서 그것을 클릭하면 페이스 북의 로그인 창이 빈 페이지보다 나옵니다.

수동으로이 포트의 Facebook에 내 앱 설정을 구성했지만 도움이되지 않았습니다.

또한이 포트를 통해 내 사이트에 액세스하려고했습니다.

그런 다음 jquery를 통해 포트 번호를 80으로 변경 했는데도 도움이되지 않았습니다.

그런 문제가 있습니까?

+1

당신은'GetFacebookRedirectUri()'등 수 있을까요? 그 방법 내에서 포트 번호를 자르기 만하면됩니다. –

+0

고맙습니다. 귀하의 대답은 제가 한 걸음 더 나아갈 수 있도록 도와주었습니다. GetFacebookRedirectUri()를 사용하고 포트 번호를 자릅니다. 이것은 내 FacebookCallBack() 메소드에 응답하기 위해 발생하지만, 앞으로는 진행되지 않습니다. AppHarbor에서 이러한 상황을 디버깅하는 방법을 모르기 때문에 저는 붙어 있습니다. 이제 나는 새로운 LogEvent를 사용합니다. AppHarbor의 관리 영역으로 메시지를 가져 오려면 –

답변

4

페이스 북 API에 익숙하지 않지만 비슷한 문제가 있습니다. 전달되는 returnUrl 값이 잘못된 것 같습니다. AppHarbor가로드 균형 조정을 위해 내부적으로 사용하는 포트 번호가 포함되어있을 수 있습니다. http://support.appharbor.com/kb/getting-started/workaround-for-generating-absolute-urls-without-port-number

이 그런 다음 returnUrl의 값이 공개적으로 사용할 수 있는지 확인 :

는 AppHarbor에 대한 공개 URL을 생성하는 방법에 대한이 문서를 참조하십시오.

2

이제이 문제를 효과적으로 해결하는 true으로 aspnet:UseHostHeaderForRequestUrl appSetting을 설정할 수 있습니다. 이는 해당 키와 값을 사용하여 응용 프로그램에 구성 변수를 추가하여 수행 할 수 있습니다.

Source on AppHarbor