diff --git a/Oqtane.Server/Components/App.razor b/Oqtane.Server/Components/App.razor index e5bb3620..97876550 100644 --- a/Oqtane.Server/Components/App.razor +++ b/Oqtane.Server/Components/App.razor @@ -326,11 +326,8 @@ // get other request attributes string url = Context.Request.GetEncodedUrl(); string referrer = (Context.Request.Headers[HeaderNames.Referer] != StringValues.Empty) ? Context.Request.Headers[HeaderNames.Referer] : ""; - int? userid = null; - if (Context.User.HasClaim(item => item.Type == ClaimTypes.NameIdentifier)) - { - userid = int.Parse(Context.User.Claims.First(item => item.Type == ClaimTypes.NameIdentifier).Value); - } + int? userid = Context.User.UserId(); + userid = (userid == -1) ? null : userid; // check if cookie already exists Visitor visitor = null; diff --git a/Oqtane.Server/Extensions/ClaimsPrincipalExtensions.cs b/Oqtane.Server/Extensions/ClaimsPrincipalExtensions.cs index 98cd043c..1f0f8773 100644 --- a/Oqtane.Server/Extensions/ClaimsPrincipalExtensions.cs +++ b/Oqtane.Server/Extensions/ClaimsPrincipalExtensions.cs @@ -1,11 +1,14 @@ using System.Linq; using System.Security.Claims; +using Oqtane.Models; using Oqtane.Shared; namespace Oqtane.Extensions { public static class ClaimsPrincipalExtensions { + // extension methods cannot be properties - the methods below must include a () suffix when referenced + public static string Username(this ClaimsPrincipal claimsPrincipal) { if (claimsPrincipal.HasClaim(item => item.Type == ClaimTypes.Name)) diff --git a/Oqtane.Server/Services/SiteService.cs b/Oqtane.Server/Services/SiteService.cs index f8656ba7..b46c9b80 100644 --- a/Oqtane.Server/Services/SiteService.cs +++ b/Oqtane.Server/Services/SiteService.cs @@ -84,7 +84,7 @@ namespace Oqtane.Services } else // cache by user { - return await _cache.GetOrCreateAsync($"site:{_accessor.HttpContext.GetAlias().SiteKey}:{_accessor.HttpContext.User.UserId}", async entry => + return await _cache.GetOrCreateAsync($"site:{_accessor.HttpContext.GetAlias().SiteKey}:{_accessor.HttpContext.User.UserId()}", async entry => { entry.SlidingExpiration = TimeSpan.FromMinutes(30); return await GetSite(siteId);