尝试从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>
要求
最后在Register.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>
也不可用。
答案 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);