我使用 FormsAuthentication,但添加了自定义 MemberShipProvider 来根据自定义用户表进行验证。
所有包含“用户数据”的表都有一个 idUser 列,因此我需要维护用户 id 以便向用户显示他的数据。
以前我使用过会话变量(ASP.NET Webform),但当我将 Web 应用程序重写为 MVC 时,我想问一下通常认为最好的方法是什么。
会话变量仍然是保存 idUser 的最佳位置吗?或者我应该添加一个自定义的“Current.User.Identity”,它除了用户名之外还保存一个公共 userId ?
或者我应该选择一种完全不同的方法?
当我为 MVC 实现自定义成员资格提供程序时,我也遇到了同样的问题。我最终做了两件事。我将用户的 ID 存储在ProviderUserKey
的领域MembershipUser
目的。看提供者用户密钥 http://msdn.microsoft.com/en-us/library/system.web.security.membershipuser.provideruserkey.aspx。然后回答你的问题,是的,我从 System.Web.Security.IPrincipal 创建了一个自定义主体,尽管我后来继承了System.Web.Security.RolePrincipal
相反,因为我想要对角色的支持。
public class MyPrincipal : RolePrincipal
{
public Guid Id { get; set; }
public MyPrincipal(string providerName, IIdentity identity, Guid id) : base(identity)
{
Id = id;
}
}
Update:我不想在我的例子中使用会话的原因是因为我已经为应用程序禁用了它。我读过,MVC 背后的核心概念是关注点分离,它紧密模拟了无状态的 Web 工作方式。虽然我现在不记得在哪里读到过,但现在我试着记住。不过,我确实记得还读过,如果你可以取消会议,你就应该这样做。它将允许 IIS 提供来自您的应用程序的同时请求,而不必等待一个请求完成(并释放用户的会话),然后下一个请求才能使用该会话并发送其响应。其中最大的影响是使用 Ajax 加载页面内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)