ASP. NET Идентификация Зарегистрируйте нового пользователя, чтобы использовать имя пользователя в качестве имени пользователя, а не электронной почты, но по-прежнему не отображается, кто вошел в систему - PullRequest
0 голосов
/ 26 апреля 2020

Попытка установить имя пользователя при регистрации нового пользователя из Input.UserName и не использовать Input.Email. После долгих исследований самый тщательный пост, хотя и немного устаревший, был здесь

, который я использую: Microsoft Visual Studio Community 2019 Version 16.5.3; ASP. NET Веб-фреймворки и инструменты 2019 16.5.236.49856; ASPNETCore 3.1.3

Конечно, большинство элементов Identity не отображаются, но после этой записи более чем на полпути вниз вы можете увидеть, как открыть представление и класс Register (который теперь отображается в разделе Области проекта, а не в представлениях)

Добавлен в файл класса Register.cs html InputModel, чтобы затем он был доступен для Register.cs html .cs

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

В файл Register.cs html добавлен файл:

    <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> требования в Startup.cs services.Configure<IdentityOptions>(options => из этой записи

Наконец в Register.cs html Я изменил его с / на:

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

Я запускаю программу и регистрирую нового пользователя. Он вводится в БД, но на странице не отображается sh, показывающий имя пользователя, вошедшего в систему. В _LayoutPartial.cs html в View / Shared у меня есть

    @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 недоступен.

1 Ответ

0 голосов
/ 27 апреля 2020

_LoginPartial.cs html ищет файл Login.cs html .cs, где вызывается метод SignInManager PasswordSignInAsync, но их два, и по умолчанию передается UserName для проверки пользователя; которого у вас нет, если вы входите в систему по электронной почте и паролю, так как имя пользователя больше не равно электронной почте. Итак, мой код ниже использует другой PasswordSignInAsync, который использует <TUser> для проверки.

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