2013-10-18 66 views
9

我安裝的是昨天發佈的VS2013最後位,我試圖得到一個例子工作,我讓一個外部的Facebook登錄。我的第一個問題:ASP.NET MVC 5(VS2013最終):Facebook登錄與OWIN失敗(LOGININFO爲null)

在這個控制器代碼(我沒有碰,保持不變從樣品模板):

// 
    // GET: /Account/ExternalLoginCallback 
    [AllowAnonymous] 
    public async Task<ActionResult> ExternalLoginCallback(string returnUrl) 
    { 
     var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync(); 
     if (loginInfo == null) 
     { 
      return RedirectToAction("Login"); 
     } 

我設置就行了斷點等待AuthenticationManager.GetExternalLoginInfoAsync()。代碼返回(我做我的Facebook登錄後),並且「loginInfo」爲空。在用戶界面中,登錄頁面繼續顯示,無需更改。我怎樣才能調試呢?我試圖找到GetExternalLoginInfoAsync(內碼),但根據此線索:

Where is Microsoft.AspNet.Identity.Owin.AuthenticationManager in Asp.Net Identity RTM version?

的AuthenticationManager現在已經沒有了。 (這似乎並不是上述情況。)

我的第二個問題:是否有人能夠使用Facebook登錄獲得樣本,但沒有更改ASP.NET MVC5示例代碼(除了取消註釋應用程序之外。使用FacebookAuthentication並填寫您的FB應用程序詳細信息)? (你必須配置別名主機與Facebook,如「localtest.me」,並與IIS快遞配置。)

感謝您的幫助......

-Ben

回答

3

好,這對我來說很愚蠢。首先,我開始使用Fiddler進行調試,並看到Facebook正在發回:

WWW-Authenticate:OAuth「Facebook Platform」「invalid_request」「該請求無效,因爲應用程序密鑰與客戶端令牌相同「

此消息是不準確的,但尋找它,我發現了另一個線程在用戶指定的重置應用程序祕密解決了這個問題。 (我很久沒有使用這個應用程序,因此可能與此有關。)所以我採取了這些步驟,但仍然看到了問題。但在提琴手的消息改變:

WWW驗證:OAuth的「Facebook平臺」,「INVALID_REQUEST」

事實上「因爲應用程序被配置爲一個桌面應用程序的請求是無效的」,應用在Facebook的配置錯誤。我將它設置爲一個Web應用程序,它現在完美運行!希望這可以幫助其他人,因爲在開除小提琴手之前這一點還不清楚。

+0

我遇到同樣的問題...但是我的facebook應用程序設置被配置爲網站...你能想到任何可能導致此問題的選擇嗎? – user153410

+0

我會使用像調試器一樣的HTTP調試器來查看封面下發生了什麼。這就是我瞭解我發生了什麼事的原因。 – BenjiFB

14

我在向Google(OpenID,而不是OAuth)進行身份驗證時遇到了此問題。所以真的沒有什麼可以搞砸了,但是很確定,在會話變量周圍發生了一些簡單的代碼更改後,它就停止了工作我使用小提琴手確定Google確實返回了有效的信息。

有人比我更聰明的想出了我的問題,並在這裏描述了修復。

ASP.NET_SessionId + OWIN Cookies do not send to browser

我所要做的就是添加Session["salt"] = "salt";到帳戶/登錄控制器,和中提琴奇蹟般地開始工作完美。不知道這是否是你確切的問題,但這是我的。

+0

有幫助,謝謝 –

0

最後,我找到了答案OWIN認證失敗。 我真的想知道什麼是我的ASP.NET MVC 5申請發生時,我試圖添加Facebook驗證。在我嘗試了互聯網上的所有解決方案之後。

只要改變你的Facebook應用程序與新的Facebook開發者應用程序或更改Facebook的開發者網站的應用程序的祕密。

2

我開始在最新的VS 2013.3模板得到這個,實現了身份驗證是不是在玩漂亮與FormsAuthentication,我不必要從我的其他項目的一個移植。下面是我做修復它:

添加<system.web><authentication mode="None" />...

添加<system.webServer><modules><remove name="FormsAuthentication" /></modules>...

+0

不知道爲什麼這是downvoted這是當時同樣的問題的合法修復。我想,因爲它似乎並不直接相關,但這確實爲我解決了這個問題。您的里程可能會有所不同。 – parliament

+0

它也可以幫助我,在我的情況下,身份驗證是在Windows模式下進行的。 –

2

對於我這種失敗,因爲我認爲,Facebook的總訪問生日屬性,但這種情況並非如此:

// facebook doesn't guarantee that this value exists always, 
// thus we can't really add this claim to our identity object, if it's null. 
var birthday = context.User.Value<string>("birthday"); 
if (birthday != null) 
{ 
    context.Identity.AddClaim(new Claim("Birthdate", 
     context.User.Value<string>("birthday"))); 
} 

這延伸到幾乎所有:

1)有些用戶沒有姓(人lowed)

2)有些用戶沒有電子郵件在FB(允許)

3)有些用戶不給生日,

你必須照顧周全。

0

我能看到一切都在提琴手工作與填充LOGININFO目前所需要的信息,但仍然得到空從GetExternalLoginInfoAsnyc返回。

當我加入以下行中Startup.Auth的ConfigureAuth方法,LOGININFO不再空。

app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); 
0

我有同樣的問題,因爲我沒有啓用谷歌API。 Fiddler正在返回access_denied的錯誤狀態。

我已經創建了該項目並獲得了客戶端ID和機密數據,但是您還需要轉到開發者控制檯並啓用Google+ api。

1

我加入microsoft.security.owin.facebook參考項目弗朗NuGet包管理器,並開始正常工作。