AuthenticationManager.SignIn上的HttpContext.Current.User.Identity

Fre*_*ias 1 asp.net-mvc asp.net-identity

我正在使用ASP.Net Identity来管理我的用户.

在调用以下内容后我发现:

AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = isPersistent }, identity);
Run Code Online (Sandbox Code Playgroud)

当我检查用户当前是否通过HttpContext.Current.User.Identity.IsAuthenticated它进行身份验证返回false.

我设法true通过执行以下操作来获取此信息:

FormsAuthentication.SetAuthCookie(model.UserName, false);
Run Code Online (Sandbox Code Playgroud)

是否可以设置HttpContext.Current.User.Identity.IsAuthenticatedtrue

ris*_*ism 6

你不必要地对抗系统.

AuthenticationManager.SignIn 获取一个可用于当前请求的剩余部分的标识参数,该参数应该非常短.

var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity);
Debug.WriteLine(identity.IsAuthenticated); //true 
Debug.WriteLine(this.Request.IsAuthenticated); //false
Run Code Online (Sandbox Code Playgroud)

手头的请求的目的是简单地验证用户.如果有的话,你不应该做更多的事情,然后返回响应/进行重定向.

其原因this.Request.IsAuthenticated==false,即使你只是(成功)认证的用户是因为这个值是由设置FormsAuthenticationModule在初始阶段(AuthenticateRequest)请求管道.

FormsAuthenticationModule会寻找AUTH-的cookie和验证(IsAuthenticated=true根据发现的情况的信息).

这一切都在您点击控制器中的操作之前发生,因此如果请求未经过身份验证,则可能会被短路.

因此,只需在登录操作中对用户进行身份验证就不会更改此值,因为为时已晚.从请求管道的角度来看,所有这些操作都是附加/重新验证auth-cookie,auth-cookie将在下一个请求期间由auth模块使用.

这也是为什么我们通常会立即重定向以使auth模块在下一个请求中更新值.