Asp.net MVC UserManager登录不区分大小写的用户名
我正在尝试修复我的应用程序中的一个错误,当时用于登录的用户电子邮件是区分大小写的,而它应该是不区分大小写的 我正在使用以下代码在MVC中执行此操作:Asp.net MVC UserManager登录不区分大小写的用户名,asp.net,asp.net-mvc,asp.net-identity,Asp.net,Asp.net Mvc,Asp.net Identity,我正在尝试修复我的应用程序中的一个错误,当时用于登录的用户电子邮件是区分大小写的,而它应该是不区分大小写的 我正在使用以下代码在MVC中执行此操作: public ActionResult Login(LoginViewModel model, string returnUrl) { if (ModelState.IsValid) { var user = _userManager.Find(model.UserName, model.Password);
public ActionResult Login(LoginViewModel model, string returnUrl)
{
if (ModelState.IsValid)
{
var user = _userManager.Find(model.UserName, model.Password);
if (user != null)
{
SignIn(user, model.RememberMe);
return RedirectToAction("List", "Survey");
}
ModelState.AddModelError("LoginFailure", "Invalid username or password.");
}
return View(model);
}
\u userManager
是一个userManager
,是对标准AspNet标识userManager
的覆盖。这似乎是在使用区分大小写的比较
我已经研究了许多解决这个问题的方法,包括一种显而易见的方法,即输入所有用户名时都使用小写或大写,并更改数据库以进行匹配,但是如果可能的话,我宁愿在不编辑数据库的情况下解决这个问题。我已经尝试过使用lambda表达式,但不幸的是,这些表达式对于Find方法似乎不起作用
数据库中的“我的用户名”列的排序规则为SQL\u Latin1\u General\u CP1\u CI\u as
,我认为这使它对比较不区分大小写
我环顾四周已经有一段时间了,没有发现任何人抱怨完全相同的问题,除了在医院的那个人
我将非常感谢在这个问题上提供的任何帮助,如果这是唯一可能的方法,那么这些帮助不涉及数据库操作,甚至不涉及确认。谢谢。感谢Sam Farajpour Ghamari的评论,我能够找到
UserStore
的findUserByName
方法的覆盖并更改此代码:
public User GetByUsername(string username)
{
return GetAll().FirstOrDefault(u => u.UserName == username);
}
为此:
public User GetByUsername(string username)
{
return GetAll().FirstOrDefault(u => u.UserName.ToLower() == username.ToLower());
}
它成功了。谢谢你的帮助。你好,希望我的代码对你有帮助 型号
public class Users
{
[Key]
public int Id { get; set; }
[Required]
public string Username { get; set; }
[Required]
[DataType(DataType.Password)]
public string Password { get; set; }
}
这是我的控制器
public ActionResult Login(Users model)
{
using (var db = new YourDBContext())
{
//check if database for username
var accountCheck = db.Users.FirstOrDefault(u => u.Username == model.Username);
if (model.Username != null && accountCheck != null)
{
var userPass = db.Users.Where(u => u.Username == model.Username).Select(u => u.Password);
//Materializes the query into a readable list of array objects
var materializePass = userPass.ToList();
//Since query will only result to one , we ony have one array of result
var password = materializePass[0];
//Check username and password (Case Sensitive)
if (accountCheck.Username == model.Username && model.Password == password )
{
//Your code here to redirect
}
}
}
}
您是否使用EF和默认EF的
UserStore
?默认UserStore
的按名称查找用户是不区分大小写的。不,我们已经对其进行了重写,但从中我能够找出问题所在,谢谢。