ASP:登录不认证

时间:2010-01-14 22:39:40

标签: asp.net asp.net-membership

我目前正在使用SQLMembership提供程序学习表单身份验证。 ASP:登录控件似乎没有进行身份验证。以下是我本地计算机上测试站点的结构:

~/LoginTest/
  Default.aspx
  CreateUser.aspx
  lostpassword.aspx
  web.config
  /login/
    Login.aspx
    ProtectedStuff.aspx
    web.config

在LoginTest文件夹的web.config文件中,我添加了以下节点:

  <connectionStrings>
    <add name="EvgSqlConnection" connectionString="connection string" />
  </connectionStrings>

  <authentication mode="Forms">
    <forms name="LoginTest" loginUrl="~/login/Login.aspx" path="/login"
      cookieless="UseCookies" />
  </authentication>


  <membership defaultProvider="mySqlProvider" userIsOnlineTimeWindow="15">
    <providers>
      <clear/>
      <add
        name="mySqlProvider"
        type="System.Web.Security.SqlMembershipProvider"
        connectionStringName="EvgSqlConnection"
        applicationName="LoginTest"
        enablePasswordRetrieval="false"
        enablePasswordReset="true"
        requiresQuestionAndAnswer="true"
        requiresUniqueEmail="true"
        passwordFormat="Hashed" /> 
    </providers>
  </membership>


  <roleManager enabled="true" defaultProvider="mySqlRoleProvider" cacheRolesInCookie="true" cookieProtection="All">
    <providers>
      <clear/>
      <add name="mySqlRoleProvider" applicationName="LoginTest" connectionStringName="EvgSqlConnection"
           type="System.Web.Security.SqlRoleProvider"/>
    </providers>
  </roleManager>

在登录文件夹的web.config中,我有以下内容:

<configuration>
  <appSettings/>
  <connectionStrings/>
  <system.web>
    <authorization>
      <deny users="?" />
      <allow users="*" />
    </authorization>
  </system.web>
</configuration>

因此,我所阅读的内容是拒绝用户访问登录文件夹中的任何内容。在这种情况下,我的测试文件是ProtectedStuff.aspx,它只不过是带有标签的页面。目前正在发生的事情是,除了ASP:Login控件之外,一切似乎都有效。我现在可以使用ASP创建一个新用户:CreateUser.aspx上的CreateUserWizard。我可以使用在lostpassword.aspx上使用ASP:PasswordRecovery控件设置的问题和答案来恢复新密码。我可以在Login.aspx上的ASP:Login控件中输入正确的名称和密码。唯一似乎不起作用的是实际身份验证。每当我尝试去ProtectedStuff.aspx时,它都会让我回到Login.aspx,就像你未经过身份验证时一样。此外,我可以输入错误的用户名或错误的密码,并且Login控件会抱怨。我可以在网站管理页面中看到我的用户,我可以看到为用户分配了一个角色。

这些控件中没有任何自定义代码,我所做的只是在SqlProvider名称中复制到这些控件的MembershipProvider属性中。 SQL Server 2000配置了NT AUTHORITY \ Network Service用户,该用户已选中aspnet_Membership Full Access。配置文件似乎没问题,所有控件似乎都能正确读写数据库,只有Login控件似乎没有对用户进行身份验证。我还应该寻找什么?

1 个答案:

答案 0 :(得分:1)

我首先从您的Forms element

中删除path属性
  

指定应用程序发出的cookie的路径。默认值为斜杠(/),因为大多数浏览器区分大小写,如果路径不匹配,则不会发回cookie。

如果仍然失败,我会抓住Fiddler并查看登录后将哪些Cookie发送回客户端和服务器。