繁体   English   中英

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

[英]Asp.net membership custom authentication add user details to userdata with roles

我已遵循以下指南《 表单身份验证和基于角色的授权》来成功实现自定义成员身份验证和授权。 我正在使用会话来获取其他用户详细信息,例如名字和姓氏。 但是,当身份验证Cookie仍然存在/有效时,会话可能会丢失。 现在,我希望能够将用户详细信息添加到Cookie中,但不确定如何执行。 正在考虑将其添加到角色字符串中并从那里获取它,但不确定其中有什么含义。 我也看到了此链接将数据存储在身份验证cookie中,但未提及使用角色。

因此,如何将角色和其他用户详细信息都作为Cookie的一部分,这样我就不必在数据库中查找此类详细信息了?

谢谢。

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

您是否查看过“ 个人档案提供程序” ,该提供程序允许您将个人档案信息与会员数据一起存储? 这可以与“成员资格”和“角色”提供程序一起使用,甚至允许您为匿名用户创建永久性配置文件,一旦他们注册,便可以继承。

如果您确定不想使用Profile提供程序(并且有理由不这样做),请务必查看DanH关于使用UserData字段AuthToken的答案 -但请注意,您需要自己生成(或重新生成)身份验证令牌-我不用担心没有提及角色,它应该与现有方法很好地协同工作。

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

至于用户详细信息,我会将其与身份验证/授权逻辑分开。 可以使用Zhaph-Ben Duguid建议的配置文件提供程序,也可以自己实现。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM