无法使用用户名登录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法使用用户名登录相关的知识,希望对你有一定的参考价值。

我正在使用ASP.NET MVC应用程序模板,并且正在根据自己的需要进行更改。当我要登录注册用户时,我想通过userName登录。我通过电子邮件注册,然后将userName下存储的电子邮件值更改为某些用户名。

当我尝试登录时,我得到登录尝试失败。

使用调试器,我找到了问题的根源。

        [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内的某个地方,而在登录失败之前,我不提供它。

我用新属性LoginViewModelUserName更改了View和AspNetUsers,db表的字段名为UserName,并用我的新值进行了更新。

答案

更改您的视图模型,例如:

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代码进行了测试)

另一答案

您必须尝试使用​​此

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

我认为应该可以。

  • 克鲁纳·戴夫

以上是关于无法使用用户名登录的主要内容,如果未能解决你的问题,请参考以下文章

Android:片段无法转换为上下文[重复]

如何在片段活动中获取用户名?

片段无法转换为 java.util.concurrent.Executor 错误

在Android中将数据从基本活动发送到片段[重复]

如何识别哪个活动调用片段

从片段调用 Google Play 游戏服务