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 ???
答案 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,则用户肯定 进行身份验证。为什么会这样呢?