我正在使用C# MVC开发一个简单的Web应用程序。这是一个登录页。当我试图登录到系统时,有一个公共登录函数,它获取用户名和密码。
就是这样:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (ModelState.IsValid)
{
var db = new Entities2();
var user = db.DEV001_Users.FirstOrDefault(u =>
u.Username == model.Username &&
u.Password == model.Password);
if (user != null)
{
FormsAuthentication.SetAuthCookie(user.DEV001_Users_Id.ToString(),
model.RememberMe);
return RedirectToLocal(returnUrl);
}
else
{
ModelState.AddModelError("", "Invalid username or password.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
}另一方面,我有另一个控制器,名为HomeController,它获取用户DB数据(姓名、电子邮件、姓氏等):
var db = new Entities2();
var Username = User.Identity.Name;
var users = db.DEV001_Users.Where(u => u.EmailAddress.ToLower() == Username.ToLower());
var UserModel = new DEV001_Users();
if (users != null)
{
var user = users.First();
UserModel.EmailAddress = user.EmailAddress;
UserModel.GivenName = user.GivenName;
UserModel.Surname = user.Surname;
}
return View(UserModel);现在,问题是,当我想用Username获得User.Identity.Name时,它给我的是记录的ID,而不是用户名。我不知道还能做什么。
发布于 2014-11-17 19:54:28
您得到的是ID而不是名称,因为您将ID而不是名称放在auth cookie中:
FormsAuthentication.SetAuthCookie(user.DEV001_Users_Id.ToString(), model.RememberMe);无论您在cookie中设置了什么值,都将在User.Identity.Name中得到什么。
发布于 2014-11-17 19:57:08
当然,当您访问不同的字段时,在这两个函数中得到了不同的结果:在第一个字段中,user.DEV001_Users_Id可能是一个整数,在第二个user.EmailAddress和其他字段中。
事情是这样的:您已经在model.Username中有了用户名。实际上,您是作为向where提供的FirstOrDefault子句的一部分来查询它的,因此我们知道model.Username是这个DEV001_Users行中的用户名。
因此,一旦您验证了该用户是否存在于数据库中,并执行了您可能执行的任何其他检查,例如检查它们不被禁止,您就可以将您的代码修改为:
FormsAuthentication.SetAuthCookie(model.Username, model.RememberMe);顺便说一句,我不太喜欢这里的暗示,你是在用纯文本存储密码。
https://stackoverflow.com/questions/26980717
复制相似问题