Files
Atomx/Atomx.Storage/Services/IIdentityService.cs
2025-12-02 13:10:10 +08:00

85 lines
2.3 KiB
C#

using Atomx.Utils.Extension;
using System.Security.Claims;
namespace Atomx.Storage.Services
{
/// <summary>
///
/// </summary>
public interface IIdentityService
{
/// <summary>
/// 获取用户ID
/// </summary>
/// <returns></returns>
long GetUserId();
/// <summary>
/// 获取客户端IP
/// </summary>
/// <returns></returns>
string GetClientIp();
/// <summary>
/// 获取用户设置的时区
/// </summary>
/// <returns></returns>
int GetTimeZone();
}
/// <summary>
///
/// </summary>
public class IdentityService : IIdentityService
{
IHttpContextAccessor _httpContextAccessor;
/// <summary>
///
/// </summary>
/// <param name="httpContextAccessor"></param>
public IdentityService(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
/// <summary>
/// 获取用户ID
/// </summary>
/// <returns></returns>
public long GetUserId()
{
var id = _httpContextAccessor.HttpContext?.User?.Claims?.SingleOrDefault(p => p.Type == ClaimTypes.Sid)?.Value ?? "0";
return id.ToLong();
}
/// <summary>
/// 获取客户端IP
/// </summary>
/// <returns></returns>
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;
}
/// <summary>
/// 获取用户设置的时区
/// </summary>
/// <returns></returns>
public int GetTimeZone()
{
var timeZone = _httpContextAccessor.HttpContext?.User?.Claims?.SingleOrDefault(p => p.Type == "TimeZone")?.Value ?? "0";
return timeZone.ToInt();
}
}
}