Asp.net mvc 5 在MVC5中使用电子邮件登录

Asp.net mvc 5 在MVC5中使用电子邮件登录,asp.net-mvc-5,asp.net-identity-2,Asp.net Mvc 5,Asp.net Identity 2,在新创建的ASP.NET MVC5应用程序中,登录屏幕要求您输入电子邮件地址。但在引擎盖下,它使用用户名进行身份验证,假定applicationUser.UserName=applicationUser.Email 如何将其更改为通过电子邮件地址验证用户身份 在这方面,他们已经改变了Identity 2.x中的某些内容 注意:我想通过电子邮件登录 例如,在register视图中,我们的用户应提供: 电子邮件:最后一封。first@example.com 用户:最后一个,第一个 在登录期间,将使用

在新创建的ASP.NET MVC5应用程序中,登录屏幕要求您输入电子邮件地址。但在引擎盖下,它使用用户名进行身份验证,假定
applicationUser.UserName
=
applicationUser.Email

如何将其更改为通过电子邮件地址验证用户身份

在这方面,他们已经改变了Identity 2.x中的某些内容

注意:我想通过电子邮件登录

例如,在register视图中,我们的用户应提供:

电子邮件:最后一封。first@example.com

用户:最后一个,第一个


在登录期间,将使用电子邮件。目前,它使用电子邮件,但身份验证失败,因为它将电子邮件作为用户名传递。

我对identity framework也有同样的问题。在早期版本中,电子邮件地址不是注册过程的一部分。身份实现验证用户名字段是否唯一,并根据用户名和密码对用户进行身份验证。但允许我们管理和更新“IUserStore”属性,以支持唯一的电子邮件和用户名字段,以便能够插入电子邮件地址(非字母数字用户名)。但这不在VisualStudioMVC个人用户帐户模板中,我们必须添加自己的帐户

我们必须添加到ApplicationUserManager.cs的代码,包括在以下NuGet包中的示例代码

安装软件包Microsoft.AspNet.Identity.Samples-版本2.0.0-beta2 -前

manager.UserValidator=新的UserValidator(管理器)
{
AllowOnlyAlphanumericUserNames=false,
RequireUniqueEmail=true
};
在2.x版中,identity framework包括电子邮件字段作为唯一字段,还将所有必需的代码添加到了App_Start>>IdentityConfig下的visual studio MVC个人用户帐户模板中。此外,还从UI中删除了用户名部分,并仅将其保留为后端

但是身份验证机制没有改变,仍然使用用户名和密码进行验证。更改仅在注册用户时发生,电子邮件地址将插入到验证用户时使用的用户名字段中

据我了解,目前还没有任何现成的身份框架支持通过电子邮件和密码对用户进行身份验证。注册用户时,您必须在用户名字段中插入电子邮件。

在登录帐户中:

之后

我补充说:

var user = await UserManager.FindByEmailAsync(model.Email);
并改变了:

var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false); 
致:


在register视图中,我有用户名和电子邮件(我必须在
RegisterViewModel
中为其添加
UserName
属性)。

但您仍然通过UserName对用户进行身份验证,对吗?或者您是否已设法通过电子邮件验证用户身份,我的意思是在identity framework中,而不是在UI中。是的,它是通过用户名进行身份验证,但请完成此工作。:)我也有同样的问题,但我没有将“EmailConfirm”检查为true,而是将bool IsActive属性添加到ApplicationUser。我使用了与这里相同的解决方案,但它仍然是一个解决方案,而不是extends的“内置”解决方案。Microsoft MVC 5模板很好,但需要更多的思考,如“内置”扩展而不覆盖(自定义)整个身份验证机制。感谢您的回答!
var user = await UserManager.FindByEmailAsync(model.Email);
var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false); 
var result = user == null ? SignInStatus.Failure : await SignInManager.PasswordSignInAsync(user.UserName, model.Password, model.RememberMe, shouldLockout: false);