ASP.NET Identity注册新用户以将UserName用作UserName而不是Email,但仍不显示谁登录

时间:2020-04-26 15:01:13

标签: asp.net-mvc asp.net-core asp.net-identity

尝试从Input.UserName注册新用户时设置UserName,而不使用Input.Email。 经过大量研究,最彻底的帖子虽然有些过时,但仍然是here

我正在使用: Microsoft Visual Studio Community 2019版本16.5.3; ASP.NET Web框架和工具2019 16.5.236.49856; ASPNETCore 3.1.3

当然大多数身份标识项都没有公开,但是在this发布过半后,您可以看到如何公开“注册”视图和类(现在显示在项目的“区域”部分,而不是观看次数)

已添加到Register.cshtml bytes类文件中,以便可供Register.cshtml.cs

使用
InputModel

在添加的Register.cshtml文件中:

    [Required]
    [Display(Name = "Name")]
    public string UserName { get; set; }

post的Startup.cs <div class="form-group"> <label asp-for="Input.UserName"></label> <input asp-for="Input.UserName" class="form-control" /> <span asp-validation-for="Input.UserName" class="text-danger"></span> </div> 中设置<IdentityOptions>要求

最后在Re​​gister.cshtml中,我将它从/更改为:

services.Configure<IdentityOptions>(options =>

我运行程序并注册一个新用户。它将输入到数据库中,但是页面不会刷新,显示登录用户的用户名。 在“视图/共享”的_LayoutPartial.cshtml中,我有

    var user = new IdentityUser { UserName = Input.Email, Email = Input.Email };
    var user = new IdentityUser { UserName = Input.UserName, Email = Input.Email };

用户为空,因此永远不要输入此代码;但 @using Microsoft.AspNetCore.Identity @inject SignInManager<IdentityUser> SignInManager @inject UserManager<IdentityUser> UserManager <ul class="navbar-nav"> @if (SignInManager.IsSignedIn(User)) { <li class="nav-item"> <a class="nav-link text-dark" asp-area="Identity" asp-page="/Account/Manage/Index" title="Manage">Hello @User.Identity.Name!</a> 也不可用。

1 个答案:

答案 0 :(得分:0)

_LoginPartial.cshtml查找到Login.cshtml.cs文件,其中调用了SignInManager的方法PasswordSignInAsync,但有两个,默认值是传递UserName来验证用户;如果您使用电子邮件和密码登录,则没有此权限,因为UserName不再等于Email。因此,我下面的代码使用了另一个PasswordSignInAsync来使用<TUser>进行验证。

var result = await _signInManager.PasswordSignInAsync(_userManager.FindByEmailAsync(Input.Email).Result, Input.Password, Input.RememberMe, lockoutOnFailure: false);
相关问题