2011-11-12 3 views
0

페이스 북 C# SDK v5.3.2를 사용하여 페이스 북 캔버스 응용 프로그램을 만듭니다. 클라이언트 측 인증을 사용하고 있지 않습니다. 모든 서버 측에서하고 있습니다. ASP.NET MVC 3을 사용하여 응용 프로그램을 만들었으며 내 캔버스 페이지는 www.mydomain.com/FacebookCanvas/에 있습니다. 응용 프로그램이 사용자로 인증되면 응용 프로그램이 훌륭하게 작동합니다. 그러나 사용자가 처음으로 인증 할 때 문제가 발생합니다. 인증을 확인한 후 올바른 URL로 사용자를 리디렉션하는 중 문제가 발생했습니다. 이Facebook 캔버스 리디렉션

이 다음과 같이

<facebookSettings 
appId="{app id}" 
appSecret="{app secret}" 
canvasPage="https://apps.facebook.com/myapp/" 
canvasUrl="http://www.mydomain.com/FacebookCanvas" 
    secureCanvasUrl="https://www.mydomain.com/FacebookCanvas" /> 


<configSections> 
<section type="Facebook.FacebookConfigurationSection, Facebook" name="facebookSettings" allowLocation="true" allowDefinition="Everywhere" /> 
</configSections> 

<system.web> 
    <httpHandlers> 
     <add verb="*" path="facebookredirect.axd" type="Facebook.Web.FacebookAppRedirectHttpHandler, Facebook.Web" /> 
    </httpHandlers> 
</system.web> 

<system.webServer> 
<handlers> 
     <add name="facebookredirect" path="facebookredirect.axd" verb="*" type="Facebook.Web.FacebookAppRedirectHttpHandler, Facebook.Web" /> 
    </handlers> 
</system.webServer> 

내 페이스 북 앱 설정

은 ... 내 web.config 파일의 설정입니다

덕분에

+0

어떻게 https://apps.facebook.com/myapp/myapp로 리디렉션합니까? https://www.facebook.com/dialog/oauth에 전화 할 때 어떤 매개 변수를 전달합니까? – ysrb

+0

죄송 합니다만, 약간의 실수는 실제로 apps.facebook.com/myapp/FacebookCanvas/... params의 관점에서 내가 필요한 권한을 의미합니까? C# sdk를 사용하면 대부분의 헤비 리프팅이 추상화되어 있으므로 컨트롤러의 ActionResult 앞에 CanvasAuthorise 특성을 지정하고 나머지는 처리합니다. – Barry

답변

1

내가 먼저 부를 것이다 :

public virtual ActionResult GetAccessToken() 
{ 
      var redirect_uri = GetFacebookCallbackUrl(); 
      var strUrl = "https://www.facebook.com/dialog/oauth?client_id=" + Server.UrlEncode(Facebook.FacebookApplication.Current.AppId) + 
            "&redirect_uri=" + Server.UrlEncode(redirect_uri) + "&scope=user_about_me"; 
      ViewBag.RedirectUrl = strUrl; 
      return View(MVC.Home.Views.FBRedirect); 
} 

fb 콜백 :

public virtual ActionResult FbCallback() 
     { 
      var code = Request.QueryString["code"]; 

      if (!string.IsNullOrEmpty(code)) 
      { 

       string query = "client_id=" + Facebook.FacebookApplication.Current.AppId + "&client_secret=" + 
        Facebook.FacebookApplication.Current.AppSecret + "&redirect_uri=" + Server.UrlEncode(GetFacebookCallbackUrl()) + 
        "&code=" + code; 

       var response = WebRequestHelper.GetWebRequest("https://graph.facebook.com/oauth/access_token?" + query); 
       //Process response here. 
      } 

      else 
      { 
       var errorReason = Request.QueryString["error_reason"]; 
       var error = Request.QueryString["error"]; 

       ContentResult res = new ContentResult(); 
       res.Content = "code query string does not present. reason: " + errorReason; 
       res.ContentType = "text/plain"; 
       return res; 
      } 
     } 

희망이 있습니다.

관련 문제