SignInManager::ExternalLoginSignInAsync 為社交登錄返回 IsNotAllowed
我正在使用 Microsoft.NetCore.App v1.1.0(2016 年 11 月 16 日)並建構了一個標準 MVC Web 應用程序,我按照Microsoft Docs中給出的建議為 Microsoft 和 Google 添加了社交登錄。
在使用Google(或微軟)首次登錄期間,它按預期工作 - 即在我的Google賬戶身份驗證後,我的 WebApp 向我展示了一個註冊網頁,要求我提供一個與我的Google賬戶關聯的電子郵件地址,然後我登錄我的網路應用程序。不幸的是,第二次登錄時也會發生同樣的情況,因此顯然註冊失敗,因為電子郵件地址已經在我的 AspNetUsers 表中。
我在 AccountController::ExternalLoginCallback() 中的 _signInManager.ExternalLoginSignInAsync() 上設置了一個斷點。在第一次登錄時,它返回 Result.Succeeded false,可能是因為電子郵件未註冊。在第二次登錄期間,它返回 Result.IsNotAllowed,它不由以下一系列“if”語句處理,因此由“else”塊處理 - 與 Result.Succeeded false 相同。
有誰知道 Result.IsNotAllowed 是什麼意思以及為什麼要設置它?有解決方法嗎?
謝謝威爾
我只是在同樣的事情上遇到了麻煩。您可能在 startup.cs 中有以下行:
services.AddIdentity(config => config.SignIn.RequireConfirmedEmail = true)如果您查看 github 上的 Identity 原始碼,您將看到當電子郵件尚未確認時返回 IsNotAllowed。這是第三方提供商還是本地帳戶都沒有關係。要解決此問題,只需在創建和儲存 ApplicationUser 時設置 EmailConfirmed = true。在模板項目中即為 ExternalLoginConfirmation 方法。
var user = new ApplicationUser { UserName = model.Email, Email = model.Email, **EmailConfirmed = true**};