ASP.NET 身份注册新用户以使用用户名作为用户名而不是电子邮件,但仍然不显示登录者



尝试在从 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);

相关内容

  • 没有找到相关文章

最新更新