Asp.net成员身份自定义身份验证将用户详细信息添加到具有角色的用户数据中

本文关键字:用户 角色 数据 用户数 详细信息 身份 成员 net 自定义 身份验证 Asp | 更新日期: 2023-09-27 18:20:11

我遵循了以下指南"表单身份验证和基于角色的授权",成功实现了自定义成员身份验证和授权。我使用会话获取其他用户详细信息,如名字和姓氏。但是,当身份验证cookie仍然存在/有效时,会话可能会丢失。现在,我希望能够将用户详细信息添加到cookie中,但不确定如何操作。我曾想过将其添加到角色字符串中,并从中获取,但不知道其中有什么含义。我也看到过这个链接在authcookie中存储数据,但它没有提到使用角色。

因此,我如何将角色和其他用户详细信息作为cookie的一部分,这样我就不必访问数据库来获取这些详细信息了?

谢谢。

Asp.net成员身份自定义身份验证将用户详细信息添加到具有角色的用户数据中

如果使用Membership提供程序创建持久用户,最好将其他用户详细信息存储在独立于用户浏览器的类似持久存储中。

您查看过个人资料提供商吗?该提供商允许您将个人资料信息与会员数据一起存储?这可以与Membership和Roles提供程序一起使用,甚至允许您为匿名用户创建一个持久的配置文件,在他们注册后可以继续使用。

如果你确定你不想使用Profile提供程序(有理由不使用),那么一定要看看DanH关于使用UserData字段AuthToken的回答-但要注意,你需要自己生成(或重新生成)auth令牌-我不应该担心这一点,因为我没有提到Roles,它应该与现有方法配合得很好。

我将创建一个自定义RoleProvider,而不是您链接到的方法。

至于用户详细信息,我会将其与身份验证/授权逻辑分开。要么像Zhaph-BenDuguid建议的那样使用概要文件提供程序,要么自己实现它。

如果您使用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;
    }
}