2010-01-14 43 views
1

我目前正在使用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控件似乎沒有對用戶進行身份驗證。我還應該尋找什麼?提前致謝!

  • 湯姆
+1

嗨,嘗試創建一個使用上下文中的頁面.User.Identity.IsAuthenticated方法並查看用戶是否實際進行了身份驗證。如果用戶不是,則該方法返回null。 – keyboardP 2010-01-14 23:08:55

+1

是的,或者在頁面上放置一個LoginName或LoginStatus控件,看看是否顯示了匿名或認證模板。 – 2010-01-14 23:35:09

回答

0

我會從你的Forms element取出path屬性開始:

指定應用程序發出的Cookie路徑。默認值是斜線(/),因爲大多數瀏覽器都區分大小寫,並且如果存在路徑大小寫不匹配,則不會返回cookie。

如果還是失敗,我得到的Fiddler保持和看到在登錄後正在發送哪些餅乾回客戶端和服務器。

+0

謝謝你是這樣的!我將不得不再次閱讀這個元素! – Bugget 2010-01-15 00:12:57

+0

沒問題:) – 2010-01-15 01:14:40