using Microsoft.AspNetCore.Http; using System.Globalization; using System.Security.Claims; namespace StoreHub.Framework.Security; /// /// 从 读取当前请求认证票据的默认实现。 /// public class CurrentUser : ICurrentUser { private readonly IHttpContextAccessor _httpContextAccessor; public CurrentUser(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor; } /// /// 当前请求的 /// private ClaimsPrincipal? Principal => _httpContextAccessor.HttpContext?.User; /// public bool IsAuthenticated => Principal?.Identity?.IsAuthenticated == true; /// public int? Id { get { string? value = GetClaimValue(JwtClaimTypes.UserId); return int.TryParse(value, NumberStyles.Integer, CultureInfo.InvariantCulture, out int id) ? id : null; } } /// public string? UserName => GetClaimValue(JwtClaimTypes.UserName); /// public string? NickName => GetClaimValue(JwtClaimTypes.NickName); /// public IEnumerable Claims => Principal?.Claims ?? []; /// public string? GetClaimValue(string claimType) { if (string.IsNullOrWhiteSpace(claimType)) { return null; } return Principal?.FindFirst(claimType)?.Value; } /// public T? GetClaimValue(string claimType) { string? value = GetClaimValue(claimType); if (value is null) { return default; } try { return (T)Convert.ChangeType(value, typeof(T), CultureInfo.InvariantCulture); } catch { return default; } } }