Kma*_*man 6 asp.net-mvc forms-authentication
我使用FormsAuthentication,但我添加了一个自定义的MemberShipProvider来验证自定义用户表.
包含"用户数据"的所有表都有一个idUser列,因此我需要维护用户ID以向用户显示其数据.
以前我使用过会话变量(ASP.NET Webform),但是当我将Web应用程序重写为MVC时,我想问一下通常被认为是最好的方法.
会话变量仍然是保存idUser的最佳位置,或者我应该添加自定义"Current.User.Identity",除了用户名还包含公共userId?
或者我应该选择完全不同的方法?
当我为 MVC 实现自定义成员资格提供程序时,我也遇到了同样的问题。我最终做了两件事。我将用户的 ID 存储在对象ProviderUserKey的字段中MembershipUser。请参阅provideruserkey。然后回答你的问题,是的,我从 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;
}
}
Run Code Online (Sandbox Code Playgroud)
更新:我不想在我的例子中使用会话的原因是因为我已经为应用程序禁用了它。我读过,MVC 背后的核心概念是关注点分离,它紧密模拟了无状态的 Web 工作方式。虽然我现在不记得在哪里读到过,但现在我试着记住。不过,我确实记得还读过,如果你可以取消会议,你就应该这样做。它将允许 IIS 提供来自您的应用程序的同时请求,而不必等待一个请求完成(并释放用户的会话),然后下一个请求才能使用该会话并发送其响应。其中最大的影响是使用 Ajax 加载页面内容。
| 归档时间: |
|
| 查看次数: |
4252 次 |
| 最近记录: |