【发布时间】:2012-06-12 16:00:51
【问题描述】:
设置
我正在使用自定义表单身份验证 - 所有标准的东西。
在我的帐户控制器上的登录操作中,
- 我根据数据库检查用户的详细信息
- 如果成功,我将创建表单身份验证票
- 将登录的成员数据库行 id 存储在工单的 UserData 中
- 加密票证
- 将票证存储在 cookie 中
- 将 cookie 添加到 Reponse.Cookies 集合中
- 重定向到主控制器上的索引操作
我在全局 asax 中为 AuthenticateRequest 事件注册了一个处理程序。在我的处理程序中,
- 我从 HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName] 检索 cookie;
- 如果 cookie 存在,我会解密 cookie 中 Forms Authentication 票证的值
- 使用存储在身份验证票证 UserData 中的 Id 从数据库中检索用户的详细信息。
- 创建一个自定义主体并将用户(它具有自定义 LoggedInUser 属性)设置为我从数据库中检索到的用户。
- 将 HttpContext.Current.User 设置为自定义主体
问题
我在登录后调试主页请求,并注意到 global.asax 中的 AuthenticateRequest 处理程序在每个页面请求中被多次命中。我检查了 HttpContext.Current.Request.Path,这是因为我页面上的每个资源(实际上是每个 HTTP GET)都在触发身份验证请求,因此,GET jquery.js、GET logo.png 等...
问题
在第一个处理的 AuthenticateRequest 中,我转到数据库,然后将 HttpContext.Current.User 设置为我的自定义主体。什么是避免进入数据库以获取导致 AuthenticatRequest 触发的后续 HTTP GET 的好方法。实际上,只进行一次身份验证,直到用户关闭浏览器或身份验证票证过期。
TIA
【问题讨论】:
标签: asp.net-mvc-3 authentication request