通过第二次登录验证用户

时间:2013-12-29 18:06:37

标签: asp.net authentication

asp.net我正在使用第二个登录控件来验证用户的电子邮件。他们将收到一封电子邮件,指示他们进入确认登录窗口。不是web.config文件中使用的登录名。所以。我假设当他们进入登录事件时,将进行身份验证,但似乎不是。我想在这里做的只是设置配置文件属性'confirmed'= Y.所以我添加了代码:

protected void Login1_LoggedIn(object sender, EventArgs e)
{
    TextBox userName = (TextBox)Login1.FindControl("UserName");
    string uname = userName.Text;
    TextBox Password = (TextBox)Login1.FindControl("Password");
    if (Membership.ValidateUser(userName.Text, Password.Text) == true)
    {

        BDrider bd = new BDrider();

        string UserData = bd.getRidFromUsername(uname).ToString();

        FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, uname, DateTime.Now, DateTime.Now.AddMonths(3), false, UserData, FormsAuthentication.FormsCookiePath);
        string encryptedTicket = FormsAuthentication.Encrypt(ticket);
        HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);

        Response.Cookies.Add(authCookie);


        if (User.Identity.IsAuthenticated)
        {
            Profile.confirmed = "Y";
        }
    Response.Redirect("~/Main/Main.aspx");
    }   
}

但是在IsAuthenticated行上它返回false ???

1 个答案:

答案 0 :(得分:0)

似乎您正在创建cookie并尝试在同一个请求中“使用它”。不幸的是,这不起作用。表单身份验证模块将选择cookie并从下一个请求开始维护会话。

可能的解决方法是重定向到辅助页面并在那里执行操作,然后重定向到Main.aspx。那么你的代码就是

   FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, uname, DateTime.Now, DateTime.Now.AddMonths(3), false, UserData, FormsAuthentication.FormsCookiePath);
    string encryptedTicket = FormsAuthentication.Encrypt(ticket);
    HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);

    Response.Cookies.Add(authCookie);

    Response.Redirect( "Auxiliary.aspx" ); 

Auxiliary.aspx

    if (User.Identity.IsAuthenticated)
    {
        Profile.confirmed = "Y";
    }
    Response.Redirect("~/Main/Main.aspx");

但是,我不太了解if。如果您只是发布表单cookie,则用户肯定 进行身份验证。为什么会这样呢?