我目前正在使用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控件似乎没有对用户进行身份验证。我还应该寻找什么?提前致谢!
- 汤姆
嗨,尝试创建一个使用上下文中的页面.User.Identity.IsAuthenticated方法并查看用户是否实际进行了身份验证。如果用户不是,则该方法返回null。 – keyboardP 2010-01-14 23:08:55
是的,或者在页面上放置一个LoginName或LoginStatus控件,看看是否显示了匿名或认证模板。 – 2010-01-14 23:35:09