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");
}
4

2 回答 2

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是,如果您使用的是数据库提供程序,则会导致往返。

于 2012-12-22T15:23:36.467 回答
0

我通常避免重定向的来回转向,使用 Server.Transfer 转移控制权。

于 2012-12-22T16:11:03.867 回答