Asp.net-Mvc-5
Facebook MVC 5 ASP.NET 身份 - 某些使用者的電子郵件為空
這是我試圖解決一個月的問題。(嘗試了任何可能的文章/程式碼)。
在 ExternalLoginCallback 操作中,AuthenticationManager.GetExternalLoginInfoAsync()返回一個有效對象(包含所有提供者詳細資訊),但對於某些 Facebook 使用者,電子郵件為空。
對於大多數 Facebook 登錄電子郵件是預設的。但是對於大約30% 的登錄,由於電子郵件為空**,我在該過程中遇到了異常。**
幸運的是,前一段時間我創建了一個重現該問題的 Facebook 使用者。我在 localhost 中創建了一個無菌測試環境,並且確實電子郵件對於該使用者為空,而對於其他使用者則可以。
*有了這個 Facebook 使用者,我可以很好地登錄任何大型商業網站(例如 IMDB)。
我用 VS2013 創建了一個乾淨的 MVC 5 項目。
更新了所有關於認證的包:
<package id="Microsoft.AspNet.Identity.Core" version="2.1.0" targetFramework="net45" /> <package id="Microsoft.AspNet.Identity.EntityFramework" version="2.1.0" targetFramework="net45" /> <package id="Microsoft.AspNet.Identity.Owin" version="2.1.0" targetFramework="net45" /> <package id="Microsoft.Owin" version="3.0.0" targetFramework="net45" /> <package id="Microsoft.Owin.Host.SystemWeb" version="3.0.0" targetFramework="net45" /> <package id="Microsoft.Owin.Security" version="3.0.0" targetFramework="net45" /> <package id="Microsoft.Owin.Security.Cookies" version="3.0.0" targetFramework="net45" /> <package id="Microsoft.Owin.Security.Facebook" version="3.0.0" targetFramework="net45" /> <package id="Microsoft.Owin.Security.OAuth" version="3.0.0" targetFramework="net45" /> <package id="Owin" version="1.0" targetFramework="net45" />
- 在 Startup.Auth.cs 中取消標記 facebook 部分並添加以下內容:
var facebookAuthOptions = new FacebookAuthenticationOptions(); facebookAuthOptions.AppId = "***"; facebookAuthOptions.AppSecret = "***"; facebookAuthOptions.Scope.Add("email"); app.UseFacebookAuthentication(facebookAuthOptions);更新
在該 Facebook 使用者的設置螢幕中,我嘗試將電子郵件更改為另一封電子郵件,然後將其更改回來。現在電子郵件來得很好!怎麼會這樣 ?
如果此使用者沒有主電子郵件地址,則可能會發生這種情況。受影響的使用者必須刪除電子郵件,保存設置,然後重新添加地址,重新確認,然後將其設為主要地址。這可以在 IMDB 等其他網站上執行的原因可以解釋為該網站不需要
使用 facebook 登錄的權限在創建 facebook 個人資料的方式上有所不同。
即使您請求電子郵件許可,也不能保證您會獲得電子郵件地址。例如,如果有人使用電話號碼而不是電子郵件地址註冊 Facebook,則電子郵件欄位可能為空。
此外,現在使用者可以在註冊期間擁有更多控制權和選項。