2010-01-14 81 views
1

我目前正在使用SQLMembership提供程序学习表单身份验证。 ASP:登录控制似乎不认证。这里是我的测试场地,我的本地机器的结构: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之外,一切似乎都奏效:登录控制。我现在可以使用ASP创建一个新用户:CreateUser.aspx上的CreateUserWizard。我可以使用在LostPssword.aspx上使用ASP:PasswordRecovery控件设置的问题和答案来恢复新密码。我可以在ASP中输入正确的名称和密码:Login.aspx上的登录控制。唯一不起作用的是实际的认证。每当我尝试访问ProtectedStuff.aspx时,它都会将我踢回Login.aspx,就像它在您未通过身份验证时所应该的那样。此外,我可以输入错误的用户名或密码错误,登录控件抱怨。我可以在网站管理页面看到我的用户,我可以看到用户被分配了一个角色。

有后面的任何这些控件的任何自定义代码,所有我做的是复制在sqlProvider的名字进入这些控件的属性的MembershipProvider。 SQL Server 2000配置了具有aspnet_Membership完全访问权限的NT AUTHORITY \ Network Service用户。配置文件似乎没问题,所有控件似乎都能够正确读写数据库,只有Login控件似乎没有对用户进行身份验证。我还应该寻找什么?提前致谢!

  • 汤姆
+1

嗨,尝试创建一个使用上下文中的页面.User.Identity.IsAuthenticated方法并查看用户是否实际进行了身份验证。如果用户不是,则该方法返回null。 – keyboardP 2010-01-14 23:08:55

+1

是的,或者在页面上放置一个LoginName或LoginStatus控件,看看是否显示了匿名或认证模板。 – 2010-01-14 23:35:09

回答

0

我会从你的Forms element取出path属性开始:

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

如果还是失败,我得到的Fiddler保持和看到在登录后正在发送哪些饼干回客户端和服务器。

+0

谢谢你是这样的!我将不得不再次阅读这个元素! – Bugget 2010-01-15 00:12:57

+0

没问题:) – 2010-01-15 01:14:40