成功登录后使用Login Control和LoginView进行网页重定向

时间:2014-09-13 15:33:57

标签: asp.net redirect webforms loginview

请注意这里的母版页代码

<asp:LoginView ID="LoginView1" runat="server" ViewStateMode="Disabled">
                <AnonymousTemplate>
                    <ul>
                        <li><a id="registerLink" runat="server" href="~/LogReg.aspx">Register</a></li>
                        <li><a id="loginLink" runat="server" href="~/LogReg.aspx">Log in</a></li>
                    </ul>
                </AnonymousTemplate>
                <LoggedInTemplate>
                    <ul>
                        <li><a id="manage" runat="server" class="username" href="~/Account/Manage.aspx" title="Manage your account">
                            <asp:LoginName ID="LoginName2" runat="server" CssClass="username" />
                        </a>
                        </li>
                        <li><a id="A2" runat="server" href="~/Logout.aspx">Log Out</a></li>
                    </ul>
                </LoggedInTemplate>
            </asp:LoginView>

这是登录页面代码

<asp:Login ID="Login1" runat="server" Height="198px" Width="297px" DisplayRememberMe="False" OnAuthenticate="Login1_Authenticate" UserNameLabelText="Email:">
            <InstructionTextStyle Font-Italic="True" ForeColor="Black" />
            <LoginButtonStyle Font-Size="Small" />
            <TextBoxStyle Font-Size="0.8em" CssClass="float-right" Width="180px" Height="12px" />
            <LabelStyle CssClass="float-left" />
            <TitleTextStyle CssClass="task-title" />
        </asp:Login>

登录控件的身份验证事件如下所示:

protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
    {
        string un = Login1.UserName;
        string pw = Login1.Password;

        var c = db.customers.Where(s => s.customer_email == un && s.customer_password == pw && s.customer_deleted != true);
        if (c.Count() == 1)
        {
            e.Authenticated = true;
            //Something to redirect //Response.Redirect(Page.PreviousPage.ToString());
        }
        else
            e.Authenticated = false;

    }

问题是,当我在这里使用Response.Redirect函数时,它成功重定向,但loginView模板返回anonymousTemplate。如果我不使用重定向,模板将更改为LoggedInTemplate,但我想将其重定向到上一页。我使用了destinationPageUrl属性,但它的行为是相同的。谢谢你的帮助:)

1 个答案:

答案 0 :(得分:1)

问题是在调用Authenticate事件后,Login控件需要创建 FormAuthentication cookie。

如果要将经过身份验证的用户重定向到某个页面,可以使用 LoggedIn 事件。

protected void Login1_LoggedIn(object sender, EventArgs e)
{
    // User is authenticated, so do something here.
}

通常,我们将查询字符串中的 ReturnUrl 传递给Login Page。如果Login控件看到 ReturnUrl ,它将重定向回该Url。

例如,http://www.yoursite.com/login.aspx?ReturnUrl=%2fAbout%2f