我已按照以下指南Forms-Authentication-and-Role-based-Authorization成功实施自定义成员身份验证和授权。我正在使用会话来获取其他用户详细信息,例如名字和姓氏。但是,当auth cookie仍然存在/有效时,会话可能会丢失。现在我希望能够向cookie添加用户详细信息,但不知道如何操作。正在考虑将其添加到角色字符串中并从那里抓取它但不确定其含义是什么。我也看过这个链接Store data in auth cookie,但没有提到使用角色。
因此,如何将Cookie和其他用户详细信息作为Cookie的一部分,以便我不必访问数据库以获取此类详细信息?
感谢。
答案 0 :(得分:0)
如果您使用成员资格提供程序创建持久用户,则最好将其他用户详细信息存储在与用户浏览器无关的类似持久存储中。
您是否看过Profile provider,它允许您将个人资料信息与会员资料一起存储?这可以与Membership和Roles提供程序一起使用,甚至允许您为匿名用户创建持久性配置文件,这些用户可以在注册后随身携带。
如果您确定不想使用配置文件提供程序(并且有理由不这样做),那么请务必使用AuthToken的UserData字段查看DanH's answer - 但是意识到你需要自己生成(或重新生成)身份验证令牌 - 我不应该担心这不会提及角色,它应该与现有方法很好地协同工作。
答案 1 :(得分:0)
我会创建一个custom RoleProvider。
,而不是您链接的方法至于用户详细信息,我会将其与身份验证/授权逻辑分开。如Zhaph-Ben Duguid建议的那样使用Profile Provider,或者自己实现它。
如果您使用Session来缓存用户详细信息,那么Session与身份验证cookie无关的事实不是问题,因为如果Session丢失,您可以随时从数据库中刷新。
类似的东西:
public UserDetails UserDetails
{
get
{
UserDetails userDetails = Session["UserDetails"] as UserDetails;
if (userDetails == null)
{
userDetails = GetUserDetailsFromDatabase(HttpContext.Current.User.Identity.Name);
Session["UserDetails"] = userDetails;
}
return userDetails;
}
}