2014-03-02 34 views
1

我有一个自定义登录系统的正常工作,但我想添加更多的字段从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。

在此先感谢

+0

我通常存储在用户ID该cookie而不是用户名。然后我使用UserId查询User实体的数据库。当您需要扩展时,您可以将实体缓存到内存中以最小化数据库查找。 – 3ullShark

+0

我认为如果没有onbe知道从中获得更多的领域的方式,那么这就是我会做的。我会把它留到明天前夕,看看其他人是否知道一个方法。如果没有,请随时发布,作为答案,我会将其标记为答案:)。 感谢您的评论。 –

+0

我在存储cookie中太多信息时遇到的问题是它可能会减慢用户的响应时间。您还必须管理存储在cookie中的陈旧数据。我认为最好是保持简单并且每次请求都加载数据。然后当它成为问题时缓存。 – 3ullShark

回答

0

我相信这是你在找什么:http://msdn.microsoft.com/en-us/library/ms172766(v=vs.90).aspx

编辑: 另一个线程讨论中的用户身份附加字段: ASP.NET MVC - Set custom IIdentity or IPrincipal

+0

对不起,我不知道这与我的问题有什么关系。我写了一个自定义身份验证,只是想找出如何添加字段到身份。我的VB不好,但这似乎并没有这样做? –

+0

对我来说,就像您想向用户身份添加其他信息一样,此链接显示您(除其他外),如何创建自定义IPrincipal实现以实现此目的。 – maf748

相关问题