添加项目文件。
This commit is contained in:
84
Atomx.Storage/Services/IIdentityService.cs
Normal file
84
Atomx.Storage/Services/IIdentityService.cs
Normal file
@@ -0,0 +1,84 @@
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user