using Atomx.Utils.Extension; using System.Security.Claims; namespace Atomx.Storage.Services { /// /// /// public interface IIdentityService { /// /// 获取用户ID /// /// long GetUserId(); /// /// 获取客户端IP /// /// string GetClientIp(); /// /// 获取用户设置的时区 /// /// int GetTimeZone(); } /// /// /// public class IdentityService : IIdentityService { IHttpContextAccessor _httpContextAccessor; /// /// /// /// public IdentityService(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor; } /// /// 获取用户ID /// /// public long GetUserId() { var id = _httpContextAccessor.HttpContext?.User?.Claims?.SingleOrDefault(p => p.Type == ClaimTypes.Sid)?.Value ?? "0"; return id.ToLong(); } /// /// 获取客户端IP /// /// public string GetClientIp() { var ipAddress = _httpContextAccessor.HttpContext?.Request.Headers["X-Forwarded-For"].FirstOrDefault(); if (ipAddress == null) { ipAddress = _httpContextAccessor.HttpContext?.Request.Headers["X-Real-IP"].FirstOrDefault(); if (ipAddress == null) { ipAddress = _httpContextAccessor.HttpContext?.Connection.RemoteIpAddress?.ToString() ?? ""; } } return ipAddress; } /// /// 获取用户设置的时区 /// /// public int GetTimeZone() { var timeZone = _httpContextAccessor.HttpContext?.User?.Claims?.SingleOrDefault(p => p.Type == "TimeZone")?.Value ?? "0"; return timeZone.ToInt(); } } }