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登錄窗口,而不是空白頁面。

我手動配置我在facebook的應用程序設置到這個端口,但它沒有幫助。

另外我試圖通過這個端口訪問我的網站 - 什麼都沒有。

然後我通過jquery將端口號更改爲80,它也沒有幫助。

你有這樣的問題嗎?

+1

您能否包含'GetFacebookRedirectUri()'?很可能你只需要在該方法中修改端口號。 – 2012-01-13 10:05:00

+0

謝謝你,你的回答幫助我做了更多的一步 - 我使用GetFacebookRedirectUri(),然後切割端口號。這發生回答我的FacebookCallBack()方法,但它不會繼續。我卡住了,因爲我不知道如何在AppHarbor上調試這種情況。現在我使用 新的LogEvent(s).Raise(); 將消息發送到AppHarbor的管理區域 – 2012-01-19 08:31:26

回答

2

您現在可以將aspnet:UseHostHeaderForRequestUrl appSetting設置爲true,這可以有效地解決此問題。這可以通過使用相應的鍵和值嚮應用程序添加配置變量來完成。

Source on AppHarbor