我有一个自定义登录系统的正常工作,但我想添加更多的字段从User.Identity如果在所有可能的检索。MVC4添加用户ID来标识
我基本上有一个登录表单,它看起来像这样:
if (ModelState.IsValid)
{
string Identity = model.UserName;
string password = model.Password;
try
{
var User = (from u in ctx.Users
where u.UserName == model.UserName
select u).SingleOrDefault();
bool userValid = ctx.Users.Any(user => user.EmailAddress == Identity || user.UserName == Identity) && Crypto.VerifyHashedPassword(User.Password, password);
//bool userValid = ctx.Users.Any(user => user.EmailAddress == Identity || user.UserName == Identity) && User.Password == password;
if (userValid)
{
FormsAuthentication.SetAuthCookie(User.Name, false);
return RedirectToAction("Index", "Home");
}
else
{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
return View();
}
}
catch (Exception ex)
{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
return View();
}
}
return View(model);
我再简单地使用User.Identity.Name
这工作正常,并存储在Authcookie的用户名获得用户名。我希望我能做的是添加一个ID或者如果可能的话,更多的细节给cookie。
现在我知道有解决这个的几种方法。
我可以创建一个帮助器,它接受用户名,希望它是唯一的(但它应该是可伸缩性的原因,我宁愿不依赖于此),然后使用UserName从数据库中获取相关字段。
另一种选择是创建另一个Cookie,但我真的不希望这样做,要么。 |
最后,我想我能concatinate所有用户的详细信息到由分隔符分隔的一个长字符串,然后将它们分割,当我取回的细节。
的事情是,我觉得必须有这样做比上面的更好的方法。
因此,谁能更有经验,在这方面比我,告诉我我怎么能存储在验证Cookie的更多领域?这将不胜感激。
P.s.我意识到我可以使用WebSecurity,但是我在写完登录代码后才发现这一点,我不确定我想要更改它并学习如何进行WebSecurity。
在此先感谢
我通常存储在用户ID该cookie而不是用户名。然后我使用UserId查询User实体的数据库。当您需要扩展时,您可以将实体缓存到内存中以最小化数据库查找。 – 3ullShark
我认为如果没有onbe知道从中获得更多的领域的方式,那么这就是我会做的。我会把它留到明天前夕,看看其他人是否知道一个方法。如果没有,请随时发布,作为答案,我会将其标记为答案:)。 感谢您的评论。 –
我在存储cookie中太多信息时遇到的问题是它可能会减慢用户的响应时间。您还必须管理存储在cookie中的陈旧数据。我认为最好是保持简单并且每次请求都加载数据。然后当它成为问题时缓存。 – 3ullShark