【问题标题】:Cannot access user with HttpContext无法使用 HttpContext 访问用户
【发布时间】:2020-11-16 22:20:49
【问题描述】:

我正在构建 .Net-Core MVC 项目。该应用程序提供了一个名为CurrentUserService(经典)的服务。 例如,当我在实体上记录和 CRUD 操作时,我会访问此服务。

当我尝试通过IHttpContextAccessor 访问用户时,即使他是,他也没有通过身份验证。是的,我确实将services.AddHttpContextAccessor(); 添加到我的服务集合中。

我创建了一个控制器,访问了User 属性并且用户通过了身份验证。下图显示:

不知道该怎么做,求助。

当前用户服务

public class CurrentUserService : ICurrentUserService
    {
        public CurrentUserService(IHttpContextAccessor httpContextAccessor)
        {
            var user = httpContextAccessor.HttpContext?.User;
        
            if (user != null && user.Identity.IsAuthenticated)
            {
                UserId = int.Parse(user.FindFirstValue(ClaimTypes.PrimarySid));
                IsAuthenticated = user.Identity.IsAuthenticated;
            }

        }

        public int UserId { get; }

        public bool IsAuthenticated { get; }

    }

【问题讨论】:

    标签: asp.net-core authentication asp.net-core-mvc


    【解决方案1】:

    可能是 CurrentUserService 本身的问题。您正在其构造函数中实例化用户,此时您可能没有经过用户身份验证。

    我会尝试像这样更改 CurrentUserService:

    public class CurrentUserService : ICurrentUserService
    {
        private IHttpContextAccessor httpContextAccessor;
        
        public CurrentUserService(IHttpContextAccessor httpContextAccessor)
        {
            this.httpContextAccessor = httpContextAccessor;
        }
    
        private ClaimsPrincipal User => httpContextAccessor.HttpContext?.User;
    
        public int UserId => User != null && User.Identity.IsAuthenticated ? int.Parse(User.FindFirstValue(ClaimTypes.PrimarySid)) : 0;
    
        public bool IsAuthenticated => User != null && User.Identity.IsAuthenticated;
    
    }
    

    【讨论】:

      猜你喜欢
      • 2019-12-23
      • 1970-01-01
      • 2021-08-06
      • 2019-08-24
      • 1970-01-01
      • 2019-11-17
      • 1970-01-01
      • 2021-11-28
      • 2012-09-09
      相关资源
      最近更新 更多