我在我的应用程序上使用了ASP.NET MVC和表单身份验证。基本上,我使用FormsAuthentication.SetAuthCookie
登录,使用FormsAuthentication.SignOut
注销。
在HttpContext.Current.User.Identity中,我已经存储了用户名,但我需要有关登录用户的更多信息。我不想在会话中存储我的整个用户obj,因为它可能很大,并且包含的信息比我需要的要多得多。
您认为创建一个名为LoggedUserInfo
的类,只包含我需要的属性,然后将其添加到会话variable
中是个好主意吗?这是一种好的方法吗?
或者你有更好的主意吗?
发布于 2009-12-02 06:05:15
我实际上喜欢使用我在登录操作方法中设置的CustomPrincipal和CustomIdentity,例如
if (!String.IsNullOrEmpty(username) && !String.IsNullOrEmpty(password) && _authService.IsValidLogin(username, password))
{
User objUser = _userService.GetUserByName(username);
if (objUser != null)
{
//** Construct the userdata string
string userData = objUser.RoleName + "|" + objUser.DistrictID + "|" + objUser.DistrictName + "|" + objUser.ID + "|" + objUser.DisplayName;
HttpCookie authCookie = FormsAuthentication.GetAuthCookie(username, rememberMe.GetValueOrDefault());
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(authCookie.Value);
FormsAuthenticationTicket newTicket = new FormsAuthenticationTicket(ticket.Version, ticket.Name, ticket.IssueDate, ticket.Expiration, ticket.IsPersistent, userData);
authCookie.Value = FormsAuthentication.Encrypt(newTicket);
Response.Cookies.Add(authCookie);
return RedirectToAction("Index", "Absence");
}
else
{
return RedirectToAction("LogOn", "Account");
}
}
else
{
return RedirectToAction("LogOn", "Account");
}
然后,在自定义主体中,您可以使用访问传递给构造函数的特定信息的方法,如
((CustomIdentity)((CustomPrincipal)HttpContext.Current.User).Identity).DisplayName;
其中在CustomIdentity类中声明了DisplayName属性。
发布于 2009-12-01 02:33:41
将其存储在会话中的服务器端。
例如:
// Make this as light as possible and store only what you need
public class UserCedentials
{
public string Username { get; set; }
public string SomeOtherInfo { get; set; }
// etc...
}
然后,当他们登录时,只需执行以下操作即可保存用户信息:
// Should make typesafe accessors for your session objects but you will
// get the point from this example
Session["UserCredentials"] = new UserCredentials()
{ Username = "SomeUserName", SomeOtherInfo = "SomeMoreData" };
然后,当你需要它的时候,获取它:
UserCredentials user = (UserCredentials)(Session["UserCredentials"]);
我已经写了几个关于在MVC中进行自定义授权的问题/答案:How to implement authorization checks in ASP.NET MVC based on Session data?
https://stackoverflow.com/questions/1821412
复制相似问题