.Net成员资格提供程序,通过持久性cookie登录时验证用户

时间:2010-06-29 14:48:11

标签: asp.net asp.net-membership forms-authentication

当用户登录我的网站时,我有一个自定义成员资格提供程序,它会覆盖ValidateUser并验证用户是否拥有足够的权限等。

但是,当使用RememberMeSet通过默认表单身份验证实现“记住我”功能时,我还想在第一次请求时验证用户。

当用户使用持久性cookie登录时,是否有一些我可以附加到该触发器的钩子?

3 个答案:

答案 0 :(得分:2)

您需要做的只是调用Membership.GetUser(),它返回当前登录用户的MembershipUser实例。如果您的用户上次使用“记住我”登录,则会导致持久身份验证。客户端上的cookie,您的MembershipProvider会自动告诉您用户是否已登录[来自持久性cookie]。 从持久身份验证Cookie验证用户无需额外的工作。

您可以在方法MembershipUser返回的Membership.GetUser()实例上计算额外的挂钩,并检查他是否有权执行该任务。如果未发现用户已登录,则该方法将仅返回null

答案 1 :(得分:0)

我认为您正在寻找的是HttpModule中的AuthenticateRequest事件。在此事件处理程序中,您可以检查cookie并验证凭据,然后设置HttpContext.Current.User以授权用户。

答案 2 :(得分:0)

解决方法:

  1. 拥有会话变量,例如UserIsVerified或其他
  2. 通过默认登录页面登录时(或通过单点登录等)将此变量设置为true
  3. 在global.asax中创建方法Application_PreRequestHandlerExecute,验证是否已设置UserIsVerified道具,如果没有:执行相应的检查
  4. 为什么Application_PreRequestHandlerExecute?

    在PreRequest上,会话和个人资料都可用。 .Net已经解释了持久性cookie,因此您可能想要的每个信息都存在。当用户检查失败时,您也可以执行重定向,因为我们处于请求周期中。它也发生在任何用户代码执行之前,所以在这里做它是非常安全的,以防止这样的行为。

    如果处理程序中的身份验证失败,我会重定向到注销页面,让.Net处理其他所有内容。