1

我正在尝试使用我在 ASP.NET v2.0 中的 Membership Providers 范例中找到的一些 教程来配置身份验证。我已按照教程中的示例进行操作,但似乎无法使该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 登录控件。这是身份验证事件处理程序代码:

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

我错过了配置步骤吗?

4

2 回答 2

1

问题出在 path="/FormsAuth" 参数中。删除此变量并重试

阅读这篇文章,了解为什么路径可能是错误的

来自 MSDN:路径 - 可选属性。指定应用程序发出的 cookie 的路径。默认值为斜线 (/),因为大多数浏览器都区分大小写,如果路径大小写不匹配,则不会发送回 cookie。

注意:路径属性区分大小写。因此,如果您将路径属性的值设置为/application1,并且如果应用程序名称为Application1,则身份验证cookie 路径为/application1。

所以如果你想使用路径属性,你应该将它设置为“/project”,因为 Project 是你的应用程序的名称(据我所知)。但是我认为当你使用不同的cookie名称时你不需要有不同的路径(即这个应用程序中的name="POTOKCookie",我希望与安装在同一主机上的其他ASP.NET应用程序不同)

请参阅PRB:表单身份验证请求未定向到 loginUrl 页面

于 2009-08-19T07:55:13.680 回答
0

如果您使用具有 ASP.NET 成员资格的 Login 控件,则无需编写代码来执行身份验证。但是,如果要创建自己的身份验证逻辑,则可以处理 Login 控件的 Authenticate 事件并添加自定义身份验证代码。

因此,我认为,我建议您只需删除 Login1_Authenticate 事件,因为它可以完成双重工作,因为控件本身负责调用 ValidateUser 和重定向。

还要检查 Login 控件的 DestinationPageUrl 属性

如果您没有为 DestinationPageUrl 属性指定值,则用户将在成功登录后被重定向到用户请求的原始页面。因此,在您的情况下,不应设置此属性。

于 2009-08-18T16:47:42.247 回答