我在實現自定義ASP.NET RoleProvider時遇到困難。自定義ASP.NET RoleProvider問題
首先,讓我告訴你在我的web.config文件中的相關設置:
<?xml version="1.0"?>
<configuration>
<system.web>
<authentication mode="Forms">
<forms loginUrl="Login.aspx"
name="FormsAuthentication"
path="Default.aspx"
timeout="20"/>
</authentication>
<membership defaultProvider="MembershipProvider">
<providers>
<clear />
<add name="MembershipProvider"
type="CompanyName.Security.MembershipProvider" />
</providers>
</membership>
<roleManager defaultProvider="RoleProvider"
enabled="true">
<providers>
<clear />
<add name="RoleProvider"
type="CompanyName.Security.RoleProvider" />
</providers>
</roleManager>
</system.web>
<location path="Employees.aspx">
<system.web>
<authorization>
<deny users="?"/>
<allow roles="Employees"/>
</authorization>
</system.web>
</location>
</configuration>
這裏的登錄按鈕的事件處理程序的代碼:基於
if (Membership.ValidateUser(tbxUsername.Text, tbxPassword.Text))
Response.Redirect("./Employees.aspx");
else
{
tbxUsername.Text = string.Empty;
tbxPassword.Text = string.Empty;
tbxUsername.Focus();
lblLogin.Visible = true;
}
旁註FormsAuthentication.RedirectFromLoginPage()建議:
[有人建議我使用FormsAuthentication.RedirectFromLoginPage()而不是Response.Redirect()。最終,我想根據他/她的角色將用戶重定向到其他頁面。我不知道FormsAuthentication.RedirectFromLoginPage()如何允許我這樣做,因爲它不接受重定向url作爲參數。另外,我的理解是,我可以在Response.Redirect()之前調用FormsAuthentication.SetAuthCookie(),以創建FormsAuthentication.RedirectFromLoginPage()創建的身份驗證Cookie。請讓我知道,如果我的思維過程在這裏是錯誤的。]
通過源代碼後,我可以看到Membership.ValidateUser()正在執行我的自定義MembershipProvider類的ValidateUser()函數。但是,當有效用戶登錄並重定向到Employees.aspx時,用戶將返回到Login.aspx **?ReturnUrl =%2fEmployees.aspx **。我認爲這是因爲雖然用戶進行身份驗證,但他/她對Employees.aspx資源的授權失敗。
有了這個假設,我在我的自定義RoleProvider類的每個函數上創建了斷點,以查看事情發生的地方。當我調試時,其中沒有一個會中斷執行。我的RoleProvider中的大多數代碼都會拋出NotYetImplementetExceptions,但我仍然期望觸及斷點(然後會實現那些所需的功能)。這裏有兩個簡單化向下的功能我已經實現:
public override string[] GetRolesForUser(string username)
{
return new string[1] {"Employees"};
}
public override bool IsUserInRole(string username, string roleName)
{
return true;
}
我認爲,既然RoleProvider代碼永遠不會執行,那一定出事了與我的web.config。
我已經在過去兩天裏搜索了這個答案,並且嘗試了各種更改,但沒有成功。有沒有人看到我要去哪裏錯了?
在此先感謝!
我會更新我的問題,你的第一個建議作出迴應。 按照您的建議消除角色檢查時,用戶會按預期重定向。 你的第三個建議沒有按照預期重定向用戶,但是如果我刪除並且只有,它就可以工作。 這很好,但令我困擾的是我的自定義RoleProvider中的函數仍未被調用。 –
Paul
2009-11-09 07:09:54
並有你overide字符串[] GetRolesForUser(字符串用戶名)的方法? – 2009-11-09 07:15:33
是的,用「return new string [1] {」Employees「};」 (用於測試) 但是,我認爲這裏的關鍵問題是似乎沒有任何重寫函數被調用(因爲斷點沒有被命中)。 – Paul 2009-11-09 07:25:32