Asp.net core User.Identity.IsAuthenticated在解析程序中始终返回false
我正在尝试在我的ASP.NET核心项目中实现多租户。我可以从url捕获子域并从中确定租户,但是当我想从登录的用户获取租户时,user.Identity.IsAuthenticated始终返回false,即使用户已登录。代码如下:Asp.net core User.Identity.IsAuthenticated在解析程序中始终返回false,asp.net-core,Asp.net Core,我正在尝试在我的ASP.NET核心项目中实现多租户。我可以从url捕获子域并从中确定租户,但是当我想从登录的用户获取租户时,user.Identity.IsAuthenticated始终返回false,即使用户已登录。代码如下: public class CachingTenantResolver : MemoryCacheTenantResolver<Tenant> { private readonly ApplicationDbContext _context;
public class CachingTenantResolver : MemoryCacheTenantResolver<Tenant>
{
private readonly ApplicationDbContext _context;
//private readonly ILoggerFactory _loggerFactory;
public CachingTenantResolver(
ApplicationDbContext context, IMemoryCache cache, ILoggerFactory loggerFactory)
: base(cache, loggerFactory)
{
_context = context;
//_loggerFactory = loggerFactory;
}
// Resolver runs on cache misses
protected override async Task<TenantContext<Tenant>> ResolveAsync(HttpContext context)
{
Tenant tenant = new Tenant { Name = "DefaultTenant", Domain = "www" };
if(context.User.Identity.IsAuthenticated)
{
string userId = context.User.FindFirst(ClaimTypes.NameIdentifier).Value;
Account account = _context.Accounts.Include("Tenant").FirstOrDefault(i => i.IdentityUserID == userId);
tenant = account.Tenant;
}
else
{
var subdomain = context.Request.Host.Host.ToLower().Split('.');
var tempTenant = await _context.Tenants
.FirstOrDefaultAsync(t => t.Domain == subdomain[0]);
if (tempTenant!=null)
{
tenant = tempTenant;
}
}
return new TenantContext<Tenant>(tenant);
}
//...the rest of the resolver
我错过了什么?据我所知,HttpContext应该包含用户信息 确保在多租户注入之前调用app.UseAuthentication。可以提供基类吗?从哪里获得http上下文?通常http上下文仅在端点中可用。当您想在该范围之外访问它时,必须注册并注入IHttpContextAccessor。@我相信它来自Saaskit.Multitenance包。我还没有深入了解他们的代码,但我想知道如何在controller/razor之外捕获用户登录状态。当我在这里尝试context.User.Identity.IsAuthenticated时,它总是返回false。我发现了问题。在调用ConfigureServices方法中的Multitenance injection.injection之前,我应该添加app.UseAuthentication吗?