Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net .Net成员资格提供程序,在通过持久cookie登录时验证用户_Asp.net_Asp.net Membership_Forms Authentication - Fatal编程技术网

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

Asp.net .Net成员资格提供程序,在通过持久cookie登录时验证用户,asp.net,asp.net-membership,forms-authentication,Asp.net,Asp.net Membership,Forms Authentication,当用户登录到我的网站时,我有一个自定义成员资格提供商,它覆盖ValidateUser,并验证用户是否拥有足够的权限等 但是,当使用RememberMeSet通过默认表单身份验证实现“记住我”功能时,我还希望在第一次请求时验证用户 当用户使用持久cookie登录时,是否有一些钩子可以附加到该触发器上?我想您要查找的是HttpModule中的AuthenticateRequest事件。在此事件处理程序中,您可以检查cookie并验证凭据,然后设置HttpContext.Current.User以授权

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

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


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

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

解决方法:

  • 有一个会话变量,比如
    UserIsVerified
    或其他什么
  • 通过默认登录页面(或通过单点登录等)登录时,将此变量设置为
    true
  • 在global.asax中创建方法
    Application\u prerequesthandler execute
    ,验证
    UserIsVerified
    prop是否已设置,如果未设置,则执行相应的检查
  • 为什么应用程序\u PreRequestHandlerExecute?

    根据预先请求,会话和配置文件都可用。Net已经解释了持久cookie,因此您可能需要的所有信息都在那里。您还可以在用户检查失败时执行重定向,因为我们正处于请求周期。它也发生在任何用户代码执行之前,所以在这里这样做是非常安全的,以防止类似的操作


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

    您需要做的就是调用
    Membership.GetUser()
    ,返回当前登录用户的
    MembershipUser
    实例。如果您的用户上次使用“记住我”登录导致持久身份验证。在客户端上使用cookie时,您的会员资格提供商将自动告诉您用户是否[从持久cookie]登录不需要额外的工作就可以通过持久身份验证cookie对用户进行身份验证。


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

    not really。我不想自己阅读任何cookie,因为.Net可以处理所有这些。