我正在使用Microsoft.NetCore.App v1.1.0(2016年11月16日)并构建了一个标准的MVC Web App,我根据Microsoft Docs提供的建议为Microsoft和Google添加了社交登录.
在第一次使用Google(或Microsoft)登录时,它按预期工作 - 即在我的Google帐户验证后,我的WebApp向我提供了一个注册网页,要求我提供与我的Google帐户关联的电子邮件地址,然后我登录我的WebApp.不幸的是,第二次登录时也会发生同样的情况,因此很明显注册失败,因为电子邮件地址已经在我的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};