2012-12-22 127 views
3

我想根據用戶的角色重新引導用戶登錄。當我使用下面的代碼時,這些角色在調試時會變空 - 我懷疑是因爲他們還沒有完全登錄?我可能會攻擊錯誤的事件,有人能指引我走向正確的方向嗎?登錄重定向問題

<asp:Login ID="LoginUser" OnLoggedIn="Login1_LoggedIn" runat="server" 
    DestinationPageUrl="~/Login.aspx" EnableViewState="false" 
     RenderOuterTable="false"> 

<p> 
<asp:Button ID="LoginButton" CssClass="submitButton" runat="server" Width="70" 
    CommandName="Login" Text="Log In" 
     ValidationGroup="LoginUserValidationGroup" /> 
</p> 
</asp:login> 

protected void Login1_LoggedIn(object sender, System.EventArgs e) 
{ 
    // Overrides ReturnUrl page parameter 
    //Response.Redirect(LoginUser.DestinationPageUrl); 

    if (User.IsInRole("Member")) 
     Response.Redirect("~/AskExpert/AskQuestion.aspx"); 
    else if (User.IsInRole("Expert")) 
     Response.Redirect("~/Admin/Experts/ViewQuestions.aspx"); 
    else if (User.IsInRole("Admin")) 
     Response.Redirect("~/Admin/AdminHome.aspx"); 
} 

回答

2

您可以改爲使用Roles.IsUserInRole()User.IsInRole從auth cookie中讀取認證數據,看起來該數據在該事件被觸發時尚未設置。

if (Roles.IsUserInRole("Member")) 
    Response.Redirect("~/AskExpert/AskQuestion.aspx"); 
else if (Roles.IsUserInRole("Expert")) 
    Response.Redirect("~/Admin/Experts/ViewQuestions.aspx"); 
else if (Roles.IsUserInRole("Admin")) 
    Response.Redirect("~/Admin/AdminHome.aspx"); 

的缺點Roles.IsUserInRole是,如果你正在使用的數據庫供應商,它導致往返。

+0

感謝你的回答是有道理的 - 我也注意到我的數據庫在開發/測試過程中發生了變化,用戶實際上並沒有擔任這個角色! – IrishChieftain

+1

這些問題令人討厭,尤其是當您認爲某些代碼無法正常工作時,實際上可能有效:D – keyboardP

+1

單挑:我必須在頁面加載方法中將代碼移至PostBack塊以使其起作用; - ) – IrishChieftain

0

我通常會避免重定向的前後轉,用Server.Transfer轉移控件。