我正在尝试使用我在ASP.NET v2.0中的成员资格提供程序范例中找到的few tutorials配置身份验证。我遵循了本教程中的示例,但似乎无法使FormsAuthentication.RedirectFromPage方法正常工作。当我尝试登录时,通过Membership.ValidateUser验证用户凭据,但页面被发送回Login.aspx而不是Default.aspx。下面是我的web.config中的相关代码片段:
...
<authentication mode="Forms">
<forms loginUrl="Login.aspx" protection="All" timeout="60" name="POTOKCookie" requireSSL="false" path="/FormsAuth"
slidingExpiration="true" cookieless="UseCookies" enableCrossAppRedirects="false" defaultUrl="~/Default.aspx"/>
</authentication>
<authorization>
<deny users="?" />
</authorization>
...
<membership defaultProvider="CustomizedProvider">
<providers>
<clear />
<add name="CustomizedProvider"
type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="LoginDB2"
applicationName="POTOK"
minRequiredPasswordLength="5"
minRequiredNonalphanumericCharacters="0" />
</providers>
</membership>我已经验证了我的连接字符串是正确的(因为Membership.ValidateUser似乎工作得很好),并且正在为我的Login.aspx页面上的UI使用ASP.NET Login控件。以下是authenticate事件处理程序代码:
Protected Sub Login1_Authenticate(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.AuthenticateEventArgs) Handles Login1.Authenticate
If (Membership.ValidateUser(Login1.UserName, Login1.Password)) Then
FormsAuthentication.RedirectFromLoginPage(Login1.UserName, Login1.RememberMeSet)
End If
End Sub当我访问url (http://localhost/Project)时,我被带到:http://localhost/Project/Login.aspx,在“登录”之后,我的url是:http://localhost/Project/Login.aspx?ReturnUrl=%2fProject%2fDefault.aspx
我是不是错过了一个配置步骤?
发布于 2009-08-19 07:55:14
问题出在path="/FormsAuth“参数中。删除此变量,然后重试
关于路径可能出错的原因的Read this post
来自MSDN:路径-可选属性。指定应用程序发出的cookies的路径。默认值是斜杠(/),因为大多数浏览器区分大小写,如果路径大小写不匹配,则不会发送回cookie。
注意: path属性区分大小写。因此,如果您将path属性的值设置为/application1,并且应用程序名称为Application1,则身份验证cookie路径为/application1。
因此,如果你想使用路径属性,你应该将它设置为"/project“,因为项目是你的应用程序的名称(据我所知)。但是我不认为当你使用不同的cookies名称时,你需要有不同的路径(例如,这个应用程序中的name="POTOKCookie“,我希望与安装在同一主机上的其他ASP.NET应用程序不同)
请参阅PRB: Forms Authentication Requests Are Not Directed to loginUrl Page
发布于 2009-08-18 16:47:42
如果将“登录”控件与ASP.NET成员身份一起使用,则无需编写代码即可执行身份验证。但是,如果要创建自己的身份验证逻辑,则可以处理Login控件的身份验证事件并添加自定义身份验证代码。
因此,我建议您简单地删除Login1_Authenticate事件,因为控件本身负责调用ValidateUser和重定向。
还要检查Login控件的DestinationPageUrl属性
如果未指定DestinationPageUrl属性的值,则用户将在成功登录后重定向到用户请求的原始页。因此,在您的情况下,不应设置此属性。
https://stackoverflow.com/questions/1295044
复制相似问题