我有两个控制器TokkenIssuer和Login。 我在TokkenIssuer中使用了[authorize]方法A,它将登录控制器的视图,然后登录到控制器的登录操作。
登录控制器:
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();
}
从登录我在Tokenissuer Controller中重定向到动作B. 我开始知道User.Identity.IsAuthenticated在重定向到另一个控制器后会变为true但我无法获取User对象,也没有在我的重定向控制器(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;
}
}
如何解决此问题?
答案 0 :(得分:0)
在下一个请求之前为假。
以下是一个很好的解释:http://forums.asp.net/t/1177741.aspx
简而言之,在执行所请求的ASP.NET页面的代码之前,很早就在ASP.NET管道中设置了User对象。现在,在随后的访问中,ASP.NET运行时将看到表单身份验证票,而User.Identity.IsAuthenticated将为true,但在此请求中不会。
答案 1 :(得分:-1)
花了很多时间才找到问题。
我知道,在VS 2013或更高版本中,默认情况下我们创建Web应用程序时会在web.config文件中添加以下代码,该文件会禁用基于表单/声明的身份验证以创建用户对象。
<module>
<remove name = "FormsAuthentication"/>
</module>
所以评论或删除。这对我有帮助。