【发布时间】:2018-08-07 08:10:43
【问题描述】:
我正在尝试编写一个自定义身份验证管理器,它将在我的 ASP .Net Core 2.x 应用程序中处理用户登录和注销以及许多其他内容,但我一开始就卡住了。
我尝试了this Microsoft Article 中建议的方式,但是当我尝试实现登录时,它显示HttpContext does not contain a definition for SignOutAsync 错误。我有文章中建议的所有参考资料:
public async void SignIn(HttpContext httpContext, UserDbModel user, bool isPersistent = false)
{
ClaimsIdentity identity = new ClaimsIdentity(this.GetUserClaims(user), CookieAuthenticationDefaults.AuthenticationScheme);
ClaimsPrincipal principal = new ClaimsPrincipal(identity);
await HttpContext.SignInAsync(IdentityConstants.ApplicationScheme);
}
以下代码有效,但已过时:
await HttpContext.Authentication.SignOutAsync(...)
类中的引用:
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Authentication;
这里缺少什么?也许这些扩展方法在新版本中被删除了,如果是这样......我如何以正确的方式实现身份验证?
【问题讨论】:
-
您是否在项目引用中引用了库
Microsoft.AspNetCore.Authentication.Abstractions? (另见AuthenticationHttpContextExtensions.SignInAsync Method) -
看到您的评论后,我安装了地址为
Microsoft.AspNetCore.Authentication.Abstractions的nuget 包,但错误未解决。 -
@igor 我需要在类文件中引用它吗?
using Microsoft.AspNetCore.Authentication.Abstractions,因为它会导致错误... -
它是命名空间
Microsoft.AspNetCore.Authentication中的扩展。您还应该能够使用 callMicrosoft.AspNetCore.Authentication.AuthenticationHttpContextExtensions.SignInAsync(HttpContext, IdentityConstants.ApplicationScheme)访问该方法 -
也就是说,我假设
HttpContext是您的控制器中的一个字段,并且您不是指HttpContext类型。如果不是这种情况,那么这就是您的问题的原因。
标签: asp.net asp.net-core .net-core asp.net-core-mvc asp.net-core-2.0