using System.Collections.Generic; using System.Linq; using System.Security.Claims; using Microsoft.AspNetCore.Http; namespace Admin.Core.Common.Auth { /// /// 用户信息 /// public class User : IUser { private readonly IHttpContextAccessor _accessor; public User(IHttpContextAccessor accessor) { _accessor = accessor; } /// /// 用户Id /// public long Id { get { var id = _accessor?.HttpContext?.User?.FindFirst(ClaimAttributes.UserId); if (id != null && id.Value.NotNull()) { return id.Value.ToLong(); } return 0; } } /// /// 用户名 /// public string Name { get { var name = _accessor?.HttpContext?.User?.FindFirst(ClaimAttributes.UserName); if (name != null && name.Value.NotNull()) { return name.Value; } return ""; } } /// /// 用户IP /// public string IP { get { if (_accessor?.HttpContext?.Connection == null) return ""; return _accessor.HttpContext.Connection.RemoteIpAddress.ToString(); } } /// /// 用户IPv4 /// public string IPv4 { get { if (_accessor?.HttpContext?.Connection == null) return ""; return _accessor.HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString(); } } /// /// 用户IPv6 /// public string IPv6 { get { if (_accessor?.HttpContext?.Connection == null) return ""; return _accessor.HttpContext.Connection.RemoteIpAddress.MapToIPv6().ToString(); } } public bool IsAuthenticated() { return _accessor.HttpContext.User.Identity.IsAuthenticated; } public IEnumerable GetClaimsIdentity() { return _accessor.HttpContext.User.Claims; } public List GetClaimValueByType(string ClaimType) { return (from item in GetClaimsIdentity() where item.Type == ClaimType select item.Value).ToList(); } } /// /// Claim属性 /// public static class ClaimAttributes { /// /// 用户Id /// public const string UserId = "id"; /// /// 用户名 /// public const string UserName = "na"; } }