无法使用用户名登录
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
内的某个地方,而在登录失败之前,我不提供它。
我用新属性LoginViewModel
和UserName
更改了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;
我认为应该可以。
- 克鲁纳·戴夫
以上是关于无法使用用户名登录的主要内容,如果未能解决你的问题,请参考以下文章