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();
}
}
}