登录重定向问题

时间:2012-12-22 15:15:11

标签: asp.net asp.net-membership

我希望根据用户的角色重新定位登录用户。当我使用下面的代码时,调试时角色会变空 - 我怀疑它们还没有完全登录?我可能正在利用错误的事件,有人能指出我正确的方向吗?

<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 个答案:

答案 0 :(得分: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的缺点是,如果您使用的是数据库提供程序,则会导致往返。

答案 1 :(得分:0)

我通常会避免重定向的转向,使用Server.Transfer传输控件。