在登录页面中使用页面用户身份名称

时间:2013-12-30 16:33:54

标签: c# asp.net authentication redirect login

我使用默认模板在Visual Studio 2012中创建了一个项目。我希望每个用户都能够登录并重定向到不同的页面。我已经实现了第一次用户登录的代码。但是,如果我注销,然后使用其他用户登录,则该用户不会被重定向。当我调试应用程序时,在第二次登录时,它在用户名上显示为空白。我已将代码放在page_load事件中,是否有更好的事件或更好的方法来实现此代码?

var Username = Page.User.Identity.Name;

if (Username == "You" || Username == "you")
{
    Response.Redirect("~/you.aspx");
}
else if (Username == "Me" || Username == "me")
{
    Response.Redirect("~/me.aspx");
}
else if (Username == "Them" || Username == "them")
{
    Response.Redirect("~/Them.aspx");
}

我也尝试过这个代码,但是一旦用户登录就没有重定向。在我看来,代码的aspx部分在@ login之后没有被触发:

代码背后:

public partial class Login : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {


    }
    protected void LoggedIn(object sender, EventArgs e)
    {
        //This is redirect the user to their page
        switch (Page.User.Identity.Name.ToLower())
        {
            case "me":
                Response.Redirect("~/me.aspx");
                break;
            case "you":
                Response.Redirect("~/you.aspx");
                break;
            case "them":
                Response.Redirect("~/them.aspx");
                break;
        }
    }
    protected void Unnamed6_Click(object sender, EventArgs e)
    {

    }
}

Aspx Code Here:

<%@ Page Title="Log in" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Login.aspx.cs" Inherits="ChoresLists.Account.Login" %>
<%@ Register Src="~/Account/OpenAuthProviders.ascx" TagPrefix="uc" TagName="OpenAuthProviders" %>

<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
    <hgroup class="title">
        <h1><%: Title %>.</h1>
    </hgroup>
    <section id="loginForm">
        <h2>Use a local account to log in.</h2>
        <asp:Login runat="server" ViewStateMode="Disabled" RenderOuterTable="false" OnLoggedIn="LoggedIn">
            <LayoutTemplate>
                <p class="validation-summary-errors">
                    <asp:Literal runat="server" ID="FailureText" />
                </p>
                <fieldset>
                    <legend>Log in Form</legend>
                    <ol>
                        <li>
                            <asp:Label runat="server" AssociatedControlID="UserName">User name</asp:Label>
                            <asp:TextBox runat="server" ID="UserName" />
                            <asp:RequiredFieldValidator runat="server" ControlToValidate="UserName" CssClass="field-validation-error" ErrorMessage="The user name field is required." />
                        </li>
                        <li>
                            <asp:Label runat="server" AssociatedControlID="Password">Password</asp:Label>
                            <asp:TextBox runat="server" ID="Password" TextMode="Password" />
                            <asp:RequiredFieldValidator runat="server" ControlToValidate="Password" CssClass="field-validation-error" ErrorMessage="The password field is required." />
                        </li>
                        <li>
                            <asp:CheckBox runat="server" ID="RememberMe" />
                            <asp:Label runat="server" AssociatedControlID="RememberMe" CssClass="checkbox">Remember me?</asp:Label>
                        </li>
                    </ol>
                    <asp:Button runat="server" CommandName="Login" Text="Log in" OnClick="Unnamed6_Click" />
                </fieldset>
            </LayoutTemplate>
        </asp:Login>
        <p>
            <%--<asp:HyperLink runat="server" ID="RegisterHyperLink" ViewStateMode="Disabled">Register</asp:HyperLink>
            if you don't have an account.--%>
        </p>
    </section>

    <section id="socialLoginForm">

        <%--<h2>Use another service to log in.</h2>
        <uc:OpenAuthProviders runat="server" ID="OpenAuthLogin" />--%>
        <asp:Image ID="LoginImage" runat="server" ImageUrl="~/Images/102_0273.png" Width="450px" />
    </section>
</asp:Content>

4 个答案:

答案 0 :(得分:0)

嘿嘿嘿你为什么使用:

if (Username == "You" || Username == "you")
{
    Response.Redirect("~/you.aspx");
}
if (Username == "Me" || Username == "me")
{
    Response.Redirect("~/me.aspx");
}
if (Username == "Them" || Username == "them")
{
    Response.Redirect("~/Them.aspx");
}

而不是使用:

if (Username == "You" || Username == "you")
{
   Response.Redirect("~/you.aspx");
}
else if (Username == "Me" || Username == "me")
{
   Response.Redirect("~/me.aspx");
}
else if (Username == "Them" || Username == "them")
{
   Response.Redirect("~/Them.aspx");
}

答案 1 :(得分:0)

由于IIS中的URL通常不区分大小写,因此您可以使用它:

Response.Redirect(String.Format(“〜/ {0} .aspx”,Page.User.Identity.Name));

至于为什么第二次登录不是重定向,我们需要有关页面生命周期的更多信息,以及是否正在执行if(Page.IsPostBack)检查等操作。当您的第二个用户登录时,您是否还在使用此代码?

您可能应该处理Login控件的LoggedIn事件,而不是将其放在Page_Load中。像这样:

标记:

<asp:Login id="Login1" runat="server" OnLoggedIn="LoggedIn"></asp:Login>

代码:

protected void LoggedIn(object sender, EventArgs e)
{
    Response.Redirect(String.Format("~/{0}.aspx", Page.User.Identity.Name));
}

答案 2 :(得分:0)

你能做的就是这样的事情

将OnLoggedIn事件添加到您的asp:登录页面

    <asp:Login  OnLoggedIn="LoggedOn" .../>

然后有这样的方法

    protected void LoggedOn(object sender, EventArgs e)
    {
        switch (Page.User.Identity.Name.ToLower())
        {
            case "you":
                Response.Redirect("~you.aspx");
                break;
            case "me":
                Response.Redirect("~me.aspx");
                break;
            case "them":
                Response.Redirect("~them.aspx");
                break;
            default:
                Response.Redirect("Somewhere.aspx");
                break;
        }
    }

答案 3 :(得分:0)

我终于找到了我需要做的事情。我根本不需要更改登录表单。我唯一需要做的就是在Web.Config文件中注释掉这一行:

<forms loginUrl="~/Account/Login" timeout="2880" defaultUrl="~/"/>

现在我的登录工作正常。