2009-08-18 27 views
1

我正在嘗試使用fewtutorials配置身份驗證我在ASP.NET v2.0中的Membership Providers範例中找到了該身份驗證。我已經按照教程中的示例進行了操作,但似乎無法使FormsAuthentication.RedirectFromPage方法正常工作。當我嘗試登錄時,用戶憑證將通過Membership.ValidateUser進行驗證,但該頁面將發送回Login.aspx而不是Default.aspx。下面是我的web.config中的相關片段:ASP.NET SqlMembershipProvider無限循環?

... 
<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似乎工作得很好),並正在使用的ASP.NET登錄控件我的Login.aspx頁面上的UI。這裏是身份驗證事件處理代碼:

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和「登錄」後,我的網址是:http://localhost/Project/Login.aspx?ReturnUrl=%2fProject%2fDefault.aspx

我錯過配置步驟?

回答

1

問題出在path =「/ FormsAuth」參數中。 刪除此變量,然後再試一次

Read this post爲什麼路徑可能是錯誤的

從MSDN: 路徑 - 可選屬性。指定應用程序發出的Cookie的路徑。默認值是斜槓(/),因爲大多數瀏覽器都區分大小寫,並且如果存在路徑大小寫不匹配的情況,將不會返回cookie。

注:路徑屬性區分大小寫。因此,如果您將路徑屬性的值設置爲/ application1,並且應用程序名稱爲Application1,則認證cookie路徑爲/ application1。

所以如果你想使用路徑屬性,你應該將它設置爲「/ project」,因爲Project是你的應用程序的名稱(據我所知)。但我不認爲你需要有不同的路徑,當你使用不同的Cookie名稱(在此應用程序,即名稱=「POTOKCookie」,我希望這將是從安裝在同一主機上的其他ASP.NET應用程序的不同)

請參閱PRB: Forms Authentication Requests Are Not Directed to loginUrl Page

+0

我沒有刪除我以前的答案,因爲它也有效,所以您不需要爲使用ASP.NET成員身份使用Login控件的Authenticate事件編寫任何代碼,但它不是您問題的實際來源。問題出在cookie上。 – 2009-08-19 07:59:25

0

如果您在ASP.NET成員資格中使用Login控件,則不需要編寫代碼來執行身份驗證。但是,如果您想創建自己的身份驗證邏輯,則可以處理Login控件的身份驗證事件並添加自定義身份驗證代碼。

所以,我建議你只要刪除Login1_Authenticate事件就可以了,因爲控制本身負責調用ValidateUser和重定向。

同時檢查登錄控制

的DestinationPageUrl財產如果不指定DestinationPageUrl屬性的值,用戶將被重定向到原來的頁面後,在成功登錄的用戶請求。所以你的情況這財產不應該被設置。

+0

我刪除了Login1_Authenticate事件並確保DestinationPageUrl屬性未被指定,並且仍然獲得相同的行爲。 – toddk 2009-08-18 16:58:28