由于某种原因,我还没有发现,但是在成功注册并激活后,我无法使用电子邮件地址登录,而是收到错误消息“无效的登录尝试”。
由于ASP.NET Identity 2.0通过使用电子邮件登录得到了改进,我修改了注册表以实际存储真实的用户名,因为现有的注册似乎只是通过将用户名与电子邮件地址一起存储来重复的。
请在下面创建空的ASP.NET Web应用程序(MVC)项目后,查看Install-Package Microsoft.AspNet.Identity.Samples -Pre'
随附的标准代码:
var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
我的功能现在如下:
var user = new ApplicationUser { TitleId = model.TitleId, SexId = model.SexId, Forename = model.Forename, Surname = model.Surname, UserName = model.UserName, Email = model.Email, JoinDate = System.DateTime.Now };
您可以看到UserName现在正在从表单接收值。一切都很好,除了现在注册和激活后无法登录。唯一的工作回合是通过将“电子邮件”字段中的值放入“用户名”字段中来修改记录,这似乎很愚蠢。
有人可以告诉我我可能错过的事情吗?
出于某种原因,我还没有发现,但是在成功注册和激活后,我无法使用电子邮件地址登录,而是收到错误消息“无效的登录尝试”。作为ASP.NET身份2 ....
您必须修改SignInHelper.PasswordSignIn
方法。默认情况下,它使用FindByNameAsync
检查给定名称的用户是否存在:
在类AccountController.cs]中,方法:public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
。修改此:
我有同样的问题,但发现解决方案既是Marcin接受的答案,也是Hai的答案的结合。在AccountController.cs
中,您需要使用FindByEmailAsync()
而不是FindByNameAsync()
,然后使用SignInManager.PasswordSignInAsync()
,但要使用user.UserName
的值作为第一个参数(只要user
不为空),而不是[ C0]。因此,根据当前的样板代码,一个完整的答案将是这样的:
就我而言,我在startup.cs文件中将RequireConfirmedAccount = true更改为RequireConfirmedAccount = false。