尝试在从 Input.UserName 注册新用户时设置用户名,而不使用 Input.Email。 经过大量研究,最彻底的帖子虽然有点过时了,但在这里
我正在使用: Microsoft Visual Studio Community 2019 Version 16.5.3; ASP.NET Web 框架和工具 2019 16.5.236.49856; ASPNETCore 3.1.3
当然,大多数标识项都没有公开,但是在这篇文章的一半之后,您可以看到如何公开注册视图和类(现在显示在项目的"区域"部分而不是视图)
添加到 Register.cshtmlInputModel
类文件中,以便它可用于 Register.cshtml.cs
[Required]
[Display(Name = "Name")]
public string UserName { get; set; }
在添加的 Register.cshtml 文件中:
<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>
中设置要求.csservices.Configure<IdentityOptions>(options =>
从这篇文章
最后,在 Register.cshtml 中,我将其从/更改为:
var user = new IdentityUser { UserName = Input.Email, Email = Input.Email };
var user = new IdentityUser { UserName = Input.UserName, Email = Input.Email };
我运行该程序并注册一个新用户。它被输入到数据库中,但页面不会刷新,显示登录者的用户名。 在视图/共享的 _LayoutPartial.cshtml 中,我有
@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>
用户为空,因此从不输入此代码;但@User.Identity.UserName
也不可用。
_LoginPartial.cshtml 查找文件 Login.cshtml.cs其中调用了 SignInManager 的方法PasswordSignInAsync
,但有两个,默认值是传入 UserName 来验证用户;如果您使用电子邮件和密码登录,则没有,因为 UserName 不再等于电子邮件。因此,我下面的代码使用其他PasswordSignInAsync
,该使用<TUser>
进行验证。
var result = await _signInManager.PasswordSignInAsync(_userManager.FindByEmailAsync(Input.Email).Result, Input.Password, Input.RememberMe, lockoutOnFailure: false);