User.Identity.IsAuthenticated 即使在成功的表单身份验证和 setauthcookie 之后也是错误的
User.Identity.IsAuthenticated is false even after successful form authentication and setauthcookie
我有两个控制器 TokkenIssuer 和 Login。
我在 TokkenIssuer 中对方法 A 使用了 [authorize],它进入登录控制器的视图,然后进入登录控制器的登录操作。
登录控制器:
public ActionResult Login(string user,string password,string returnUrl)
{
FormsAuthentication.SetAuthCookie(user, true);
if (FormsAuthentication.Authenticate(user, password))
{
if (string.IsNullOrEmpty(returnUrl) && Request.UrlReferrer != null)
returnUrl = Server.UrlEncode(Request.UrlReferrer.PathAndQuery);
return RedirectToAction("B", "TokenIssuer");
}
return View();
}
我正在从登录重定向到令牌发行者控制器中的操作 B。
我知道 User.Identity.IsAuthenticated 将在重定向到另一个控制器后变为 true,但我无法获取用户对象,也无法在我的重定向控制器 (TokenIssuer) 中找到 User.Identity.IsAuthenticated 为 true。
TokenIssuer 控制器
[Authorize]
public ActionResult A() //takes to Login view
{
return View();
}
public ActionResult B() //Redirected from Login controller
{
if(User.Identity.IsAuthenticated) // Getting False
{
string user = User.Identity.Name;
}
}
如何解决这个问题?
找问题花了很多时间。
我了解到,在 VS 2013 或更高版本中,当我们默认创建 Web 应用程序时,它会在 web.config 文件中添加以下代码,禁用基于表单/声明的身份验证来创建用户对象。
<module>
<remove name = "FormsAuthentication"/>
</module>
所以评论或 Remove.This 帮助了我。
在下一次请求之前为假。
这里有一个很好的解释:http://forums.asp.net/t/1177741.aspx
简而言之,用户对象在 ASP.NET 管道中较早设置,远早于执行请求的 ASP.NET 页面代码。现在,在随后的访问中,ASP.NET 运行时将看到表单身份验证票证并且 User.Identity.IsAuthenticated 将为真,但不会在此请求上。
我有两个控制器 TokkenIssuer 和 Login。 我在 TokkenIssuer 中对方法 A 使用了 [authorize],它进入登录控制器的视图,然后进入登录控制器的登录操作。
登录控制器:
public ActionResult Login(string user,string password,string returnUrl)
{
FormsAuthentication.SetAuthCookie(user, true);
if (FormsAuthentication.Authenticate(user, password))
{
if (string.IsNullOrEmpty(returnUrl) && Request.UrlReferrer != null)
returnUrl = Server.UrlEncode(Request.UrlReferrer.PathAndQuery);
return RedirectToAction("B", "TokenIssuer");
}
return View();
}
我正在从登录重定向到令牌发行者控制器中的操作 B。 我知道 User.Identity.IsAuthenticated 将在重定向到另一个控制器后变为 true,但我无法获取用户对象,也无法在我的重定向控制器 (TokenIssuer) 中找到 User.Identity.IsAuthenticated 为 true。
TokenIssuer 控制器
[Authorize]
public ActionResult A() //takes to Login view
{
return View();
}
public ActionResult B() //Redirected from Login controller
{
if(User.Identity.IsAuthenticated) // Getting False
{
string user = User.Identity.Name;
}
}
如何解决这个问题?
找问题花了很多时间。
我了解到,在 VS 2013 或更高版本中,当我们默认创建 Web 应用程序时,它会在 web.config 文件中添加以下代码,禁用基于表单/声明的身份验证来创建用户对象。
<module>
<remove name = "FormsAuthentication"/>
</module>
所以评论或 Remove.This 帮助了我。
在下一次请求之前为假。
这里有一个很好的解释:http://forums.asp.net/t/1177741.aspx
简而言之,用户对象在 ASP.NET 管道中较早设置,远早于执行请求的 ASP.NET 页面代码。现在,在随后的访问中,ASP.NET 运行时将看到表单身份验证票证并且 User.Identity.IsAuthenticated 将为真,但不会在此请求上。