我正在尝试编写一个自定义身份验证管理器,它将处理用户登录和注销以及我的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;
这里缺少什么?也许这些扩展方法在新版本中被移除,如果是这样的话...我如何以正确的方式实现身份验证?
答案 0 :(得分:3)
HttpContext
应该是Controller
中字段的引用,并且您不是指/ HttpContext
类型。如果不是这种情况那么这就是问题的原因,请更改代码以使用字段/变量而不是类型。
因此,如果字段名称是httpContext
,那么使用它作为调用扩展方法是通过引用实例上的方法而不是类型来完成的,因为实例也作为扩展的第一个参数传入方法
await httpContext.SignInAsync(IdentityConstants.ApplicationScheme);
答案 1 :(得分:2)
AuthenticationHttpContextExtensions.SignOutAsync(HttpContext, "Cookies");
AuthenticationHttpContextExtensions
.SignOutAsync(HttpContext, CookieAuthenticationDefaults.AuthenticationScheme);
在控制器中试试
答案 2 :(得分:1)
insted of
await HttpContext.SignInAsync(IdentityConstants.ApplicationScheme);
应该使用
await httpContext.SignInAsync(IdentityConstants.ApplicationScheme,ClaimsPrincipal.Current);
或可以使用
await Microsoft.AspNetCore.Authentication.AuthenticationHttpContextExtensions.SignInAsync(IdentityConstants.ApplicationScheme,ClaimsPrincipal.Current);