我目前正在使用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控件似乎没有对用户进行身份验证。我还应该寻找什么?
答案 0 :(得分:1)
我首先从您的Forms element
中删除path
属性
指定应用程序发出的cookie的路径。默认值为斜杠(/),因为大多数浏览器区分大小写,如果路径不匹配,则不会发回cookie。
如果仍然失败,我会抓住Fiddler并查看登录后将哪些Cookie发送回客户端和服务器。