MVC4将UserId添加到Identity

时间:2014-03-02 17:34:03

标签: c# asp.net-mvc login identity

我有一个自定义登录系统工作正常,但我想添加更多字段,如果可能的话,从User.Identity中检索。

我基本上有一个登录表单,如下所示:

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

来检索UserName

这很好用,并将用户名存储在Authcookie中。我希望我能做的是添加一个ID或者更多细节到cookie。

现在我意识到有几种解决方法。

我可以创建一个带有用户名的帮助器,希望它是唯一的(它应该是,但出于可伸缩性的原因,我宁愿不依赖它),然后使用UserName从数据库中获取相关字段。

另一个选择是创建另一个cookie但我真的不想这样做。 |

最后我想我可以将所有用户的详细信息合并为一个由分隔符分隔的长字符串,然后在检索详细信息时拆分它们。

问题是,我觉得必须有比上述更好的方法。

那么比这更有经验的人能告诉我如何在Auth Cookie中存储更多字段吗?这将不胜感激。

P.S。我意识到我可以使用WebSecurity但我在编写登录代码后才发现这一点,我不确定是否要更改它并学习如何进行WebSecurity。

提前致谢

1 个答案:

答案 0 :(得分:0)

我相信这是您正在寻找的:http://msdn.microsoft.com/en-us/library/ms172766(v=vs.90).aspx

编辑: 讨论用户身份中其他字段的另一个主题: ASP.NET MVC - Set custom IIdentity or IPrincipal