如何在登录时轻松保存用户对象?
我现在有一个登录系统但是例如当我想转到该用户的详细信息页面时,我将userid(在视图的视图包中)传递给ActionResult Details(int userId)。
在Details ActionResult中,我然后使用userId在UserRepository中查找用户。但这似乎为数据库创造了许多不必要的工作。
难道没有更简单的方法吗?也许创建一个用户的全局变量?
我不想使用会话,因为这可能会在我部署项目(多服务器)时产生问题。
我在用户登录时使用此代码制作AuthorizationCookie:
if (IsValid(user.Email, user.Password))
{
FormsAuthentication.SetAuthCookie(user.Email, false);
ViewBag.UserId = user.UserId;
return RedirectToAction("News", "Home");
}
答案 0 :(得分:0)
您需要查看ASP.Net标识 http://www.asp.net/identity/overview/getting-started/introduction-to-aspnet-identity
此框架支持所有身份验证和授权功能。
谢谢和问候,
答案 1 :(得分:0)
FormsAuthentication类具有字符串UserData属性。你可以把它放在任何你想要的地方。
User myUser = new User();
myUser.Name = 'John';
myUser.Age = '16';
string userData = JsonConvert.SerializeObject(myUser);
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1/*version*/, myUserName, DateTime.Now, DateTime.Now.AddMonths(1), 1/*isPersitant*/, userData);
在关于用户详细信息的操作中,您可以编写类似的内容并获取用户详细信息
HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie != null)
{
FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
User currentUser = JsonConvert.DeserializeObject<User>(authTicket.UserData);