Facebook Canvas Redirect

本文关键字:Redirect Canvas Facebook | 更新日期: 2023-09-27 18:14:10

我正在使用Facebook c# SDK v5.3.2来构建Facebook画布应用程序。我没有使用任何客户端身份验证,我都是在服务器端进行的。我使用ASP创建了一个应用程序。. NET MVC 3和我的画布页面驻留在www.mydomain.com/FacebookCanvas/。一旦用户通过了身份验证,应用程序就可以正常工作。但是,在用户第一次使用它进行身份验证时出现了一个问题。在确认身份验证后,将用户重定向到正确的url存在问题。这是事件的顺序……

  • 用户请求url https://apps.facebook.com/myapp
  • 用户接受认证对话框
  • 用户被重定向到url https://apps.facebook.com/myapp/FacebookCanvas/
  • 一旦用户删除了第二个myapp,那么一切就都完美了。

这些是我的网页设置。配置文件…

<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>

我的Facebook应用设置如下

  • 应用显示名称:MyNewApp
  • 应用命名空间:myapp
  • 网站网址:http://www.mydomain.com/
  • 画布URL: http://www.mydomain.com/FacebookCanvas/
  • 安全画布URL: https://www.mydomain.com/FacebookCanvas/
  • Canvas Page: https:apps.facebook.com/myapp

Thanks in advance

Facebook Canvas Redirect

我首先调用:

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;
            }
        }

希望能有所帮助