Невозможно войти, используя имя пользователя - PullRequest
0 голосов
/ 10 апреля 2020

Я использую ASP. NET MVC шаблон приложения и меняю вещи в зависимости от своих потребностей. Когда я хочу войти в систему зарегистрированным пользователем, я хочу войти по userName. Я регистрируюсь по электронной почте и затем изменяю значение электронной почты, которое хранится в userName, на какое-то имя пользователя.

Когда я пытаюсь войти, я получаю попытку входа в систему не удалась.

Использование отладчика I выяснил источник проблемы.

        [HttpPost]
        [AllowAnonymous]
        [ValidateAntiForgeryToken]
        public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
        {
            if (!ModelState.IsValid)
            {
                return View(model);
            }


            var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false);
            switch (result)
            {
                case SignInStatus.Success:
                    return RedirectToLocal(returnUrl);
                case SignInStatus.LockedOut:
                    return View("Lockout");
                case SignInStatus.RequiresVerification:
                    return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
                case SignInStatus.Failure:
                default:
                    ModelState.AddModelError("", "Invalid login attempt.");
                    return View(model);
            }
        }

Таким образом, часть с !ModelState.IsValid работает и работает нормально.

var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false);

Эта строка кода возвращает Failure, и моя попытка входа в систему не удалась.

Я отключил RequireUniqueEmail из SignInManager, но это не помогло. Я думаю, проблема в том, что где-то внутри классов Microsoft E-mail все еще требуется, и я не предоставляю его, потому что мой вход в систему не удается.

Я изменил View и LoginViewModel с новым свойством UserName и таблица AspNetUsers db имеет поле с именем UserName и обновлено с моими новыми значениями.

Ответы [ 2 ]

1 голос
/ 10 апреля 2020

Измените модель представления следующим образом:

public class LoginViewModel
{
    [Required]
    [Display(Name = "User Name")]
    public string UserName { get; set; }
    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }

    [Display(Name = "Remember me?")]
    public bool RememberMe { get; set; }
}

В вашем представлении входа в систему, например:

@*your fields or code*@
               <div class="form-group">
                    @Html.LabelFor(m => m.UserName, new { @class = "col-md-2 control-label" })
                    <div class="col-md-10">
                        @Html.TextBoxFor(m => m.UserName, new { @class = "form-control" })
                        @Html.ValidationMessageFor(m => m.UserName, "", new { @class = "text-danger" })
                    </div>
                </div>
@*your fields or code*@

В действии входа в систему измените как:

        var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false);

Я думаю, Вам не нужно больше ничего делать. (проверено по умолчанию ASP код MVC5)

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

Вы должны попробовать это

 public ActionResult Login(LoginViewModel model, string returnUrl)
    {
// Your Code
var result = SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false).Result;
// Your Code
}

Я думаю, что это должно работать.

  • Крунал Дэйв
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...