Webforms HttpContext.Current.User.Identity.IsAuthenticated始终为true

时间:2014-05-28 12:42:40

标签: c# webforms asp.net-membership

编辑:任何人都可以解释我为什么会这样做" /"用户名?看我的#34;答案"以下

我在VS2013(.NET 4.51)中创建了一个新的WebForms应用程序,其中包括" new"身份会员提供者。我想使用较旧的成员资格提供程序,如下所示。

  1. 在web.config中填充必要的条目,如下所示:
  2.  <membership defaultProvider="DefaultMembershipProvider">
       <providers><add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
          </providers>
     </membership>
    

    <profile defaultProvider="DefaultProfileProvider">
      <providers>
        <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
      </providers>
    </profile>
    <roleManager defaultProvider="DefaultRoleProvider" enabled="true">
      <providers>
        <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
      </providers>
    </roleManager>
    

    我加倍检查了身份验证节点:

    <authentication mode="Forms">
      <forms loginUrl="Account/Login" timeout="120" defaultUrl="/">
      </forms>
    </authentication>
    

    我的登录代码如下:

    if (Membership.ValidateUser(txtUserName.Text, txtPassword.Text))
    {
       FormsAuthentication.RedirectFromLoginPage("/", chkRememberMe.Checked); 
    }
    

    和我的退出代码:

    FormsAuthentication.SignOut();
    Session.Abandon();
    FormsAuthentication.RedirectToLoginPage();
    

    然而,HttpContext.Current.User.Identity.IsAuthenticated 总是返回TRUE,这意味着即使我注销后我也可以访问网站中的任何页面,即使我有以下限制:

      <!-- Entire site is secured -->
      <location path=".">
        <system.web>
          <authorization>
            <deny users="?" />
          </authorization>
        </system.web>
      </location>
    

    我在这里缺少什么?我猜还有一些来自原始身份提供商的遗产,我没有根除这导致了这个问题。此时安全性对我来说根本不起作用,我需要在不使用新的身份成员资格提供程序的情况下使用它,这是通过VS2013中的新应用程序模板生成的新应用程序的默认设置。

    非常感谢所有指针和建议。

1 个答案:

答案 0 :(得分:0)

我今天回到这里,现在页面正在按预期进行身份验证(WT ....)。所以我猜测某个地方肯定有一个没有被清除的cookie。然而,事情仍然不对。

用户在检查时进行了身份验证:

System.Web.HttpContext.Current.User.Identity.Name

我得到了:

"/"

作为结果,而不是用户在通过以下方式登录时输入的名称:

Membership.ValidateUser(txtUserName.Text, txtPassword.Text)

即。为什么我没有得到 txtUserName.Text 的值而不是 /

我想一个相关的问题是,有没有关于如何将项目从Identity恢复到以前的会员系统的HOWTO?