Bladeren bron

更新1.3.3版本
新增 token以旧换新
新增 高级查询时间段支持月、日、时和分
新增 高级查询时间段和非时间段切换
优化 高级查询字段为时间类型时输入框宽度优化
优化 el日期控件过大调整为正常比例显示
调整 Ip限流默认关闭

xiaoxue 4 jaren geleden
bovenliggende
commit
12047997ce

+ 8 - 8
Admin.Core.Common/Admin.Core.Common.csproj

@@ -3,7 +3,7 @@
   <PropertyGroup>
     <TargetFramework>netcoreapp3.1</TargetFramework>
     <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
-    <Version>1.3.2</Version>
+    <Version>1.3.3</Version>
     <Authors>xiaoxue</Authors>
     <Company>xiaoxue</Company>
     <Description>中台Admin后端通用库</Description>
@@ -22,13 +22,13 @@
 
   <ItemGroup>
     <PackageReference Include="CSRedisCore" Version="3.6.3" />
-    <PackageReference Include="FreeSql" Version="1.5.0-preview0509" />
-    <PackageReference Include="FreeSql.Provider.MySql" Version="1.5.0-preview0509" />
-    <PackageReference Include="FreeSql.Provider.Oracle" Version="1.5.0-preview0509" />
-    <PackageReference Include="FreeSql.Provider.PostgreSQL" Version="1.5.0-preview0509" />
-    <PackageReference Include="FreeSql.Provider.Sqlite" Version="1.5.0-preview0509" />
-    <PackageReference Include="FreeSql.Provider.SqlServer" Version="1.5.0-preview0509" />
-    <PackageReference Include="FreeSql.Repository" Version="1.5.0-preview0509" />
+    <PackageReference Include="FreeSql" Version="1.6.0-preview0602" />
+    <PackageReference Include="FreeSql.Provider.MySql" Version="1.6.0-preview0602" />
+    <PackageReference Include="FreeSql.Provider.Oracle" Version="1.6.0-preview0602" />
+    <PackageReference Include="FreeSql.Provider.PostgreSQL" Version="1.6.0-preview0602" />
+    <PackageReference Include="FreeSql.Provider.Sqlite" Version="1.6.0-preview0602" />
+    <PackageReference Include="FreeSql.Provider.SqlServer" Version="1.6.0-preview0602" />
+    <PackageReference Include="FreeSql.Repository" Version="1.6.0-preview0602" />
     <PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" />
     <PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="3.1.4" />
     <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.4" />

+ 2 - 0
Admin.Core.Common/Auth/IUserToken.cs

@@ -5,5 +5,7 @@ namespace Admin.Core.Common.Auth
     public interface IUserToken
     {
         string Build(Claim[] claims);
+
+        Claim[] Decode(string jwtToken);
     }
 }

+ 5 - 0
Admin.Core.Common/Auth/User.cs

@@ -87,5 +87,10 @@ namespace Admin.Core.Common.Auth
         /// 姓名
         /// </summary>
         public const string UserNickName = "nn";
+
+        /// <summary>
+        /// 刷新有效期
+        /// </summary>
+        public const string RefreshExpires = "re";
     }
 }

+ 11 - 0
Admin.Core.Common/Auth/UserToken.cs

@@ -6,6 +6,8 @@ using System.IdentityModel.Tokens.Jwt;
 using Microsoft.IdentityModel.Tokens;
 using Admin.Core.Common.Configs;
 using Admin.Core.Common.Attributes;
+using System.Linq;
+using Google.Protobuf.WellKnownTypes;
 
 namespace Admin.Core.Common.Auth
 {
@@ -23,6 +25,8 @@ namespace Admin.Core.Common.Auth
         {
             var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_jwtConfig.SecurityKey));
             var signingCredentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
+            var refreshExpires = DateTime.Now.AddMinutes(_jwtConfig.RefreshExpires).ToString();
+             claims = claims.Append(new Claim(ClaimAttributes.RefreshExpires, refreshExpires)).ToArray();
 
             var token = new JwtSecurityToken(
                 issuer: _jwtConfig.Issuer,
@@ -34,5 +38,12 @@ namespace Admin.Core.Common.Auth
             );
             return new JwtSecurityTokenHandler().WriteToken(token);
         }
+
+        public Claim[] Decode(string jwtToken)
+        {
+            var jwtSecurityTokenHandler = new JwtSecurityTokenHandler();
+            var jwtSecurityToken = jwtSecurityTokenHandler.ReadJwtToken(jwtToken);
+            return jwtSecurityToken?.Claims?.ToArray();
+        }
     }
 }

+ 2 - 2
Admin.Core.Common/Configs/AppConfig.cs

@@ -28,7 +28,7 @@
         /// <summary>
         /// 限流
         /// </summary>
-        public bool RateLimit { get; set; } = true;
+        public bool RateLimit { get; set; } = false;
 
         /// <summary>
         /// 验证码配置
@@ -66,7 +66,7 @@
         /// <summary>
         /// 启用
         /// </summary>
-        public bool Enabled { get; set; } = true;
+        public bool Enable { get; set; } = true;
         
         /// <summary>
         /// 操作日志

+ 5 - 0
Admin.Core.Common/Configs/JwtConfig.cs

@@ -27,5 +27,10 @@ namespace Admin.Core.Common.Configs
         /// 有效期(分钟)
         /// </summary>
         public int Expires { get; set; } = 120;
+
+        /// <summary>
+        /// 刷新有效期(分钟)
+        /// </summary>
+        public int RefreshExpires { get; set; } = 480;
     }
 }

+ 1 - 1
Admin.Core.Model/Admin.Core.Model.csproj

@@ -3,7 +3,7 @@
   <PropertyGroup>
     <TargetFramework>netcoreapp3.1</TargetFramework>
     <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
-    <Version>1.3.2</Version>
+    <Version>1.3.3</Version>
     <Authors>xiaoxue</Authors>
     <Company>xiaoxue</Company>
     <Description>中台Admin后端实体库</Description>

+ 1 - 1
Admin.Core.Repository/Admin.Core.Repository.csproj

@@ -2,7 +2,7 @@
 
   <PropertyGroup>
     <TargetFramework>netcoreapp3.1</TargetFramework>
-    <Version>1.3.2</Version>
+    <Version>1.3.3</Version>
     <Authors>xiaoxue</Authors>
     <Company>xiaoxue</Company>
     <Description>中台Admin后端仓储库</Description>

+ 1 - 1
Admin.Core.Services/Admin.Core.Service.csproj

@@ -3,7 +3,7 @@
   <PropertyGroup>
     <TargetFramework>netcoreapp3.1</TargetFramework>
     <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
-    <Version>1.3.2</Version>
+    <Version>1.3.3</Version>
     <Authors>xiaoxue</Authors>
     <Company>xiaoxue</Company>
     <Description>中台Admin后端服务库</Description>

+ 1 - 1
Admin.Core.Services/Admin/Auth/AuthService.cs

@@ -46,7 +46,7 @@ namespace Admin.Core.Service.Admin.Auth
         public async Task<IResponseOutput> LoginAsync(AuthLoginInput input)
         {
             #region 验证码校验
-            if (_appConfig.VarifyCode.Enabled)
+            if (_appConfig.VarifyCode.Enable)
             {
                 var verifyCodeKey = string.Format(CacheKey.VerifyCodeKey, input.VerifyCodeKey);
                 var exists = await _cache.ExistsAsync(verifyCodeKey);

+ 3 - 0
Admin.Core.Services/Admin/User/IUserService.cs

@@ -4,6 +4,7 @@ using System.Threading.Tasks;
 using Admin.Core.Common.Input;
 using Admin.Core.Common.Output;
 using Admin.Core.Model.Admin;
+using Admin.Core.Service.Admin.Auth.Output;
 using Admin.Core.Service.Admin.User.Input;
 using Admin.Core.Service.Admin.User.Output;
 
@@ -14,6 +15,8 @@ namespace Admin.Core.Service.Admin.User
     /// </summary>	
     public interface IUserService
 	{
+        Task<ResponseOutput<AuthLoginOutput>> GetLoginUserAsync(long id);
+
         Task<ResponseOutput<UserGetOutput>> GetAsync(long id);
 
         Task<IResponseOutput> PageAsync(PageInput<UserEntity> input);

+ 8 - 0
Admin.Core.Services/Admin/User/UserService.cs

@@ -13,6 +13,7 @@ using Admin.Core.Service.Admin.User;
 using Admin.Core.Service.Admin.User.Input;
 using Admin.Core.Service.Admin.User.Output;
 using Admin.Core.Common.Attributes;
+using Admin.Core.Service.Admin.Auth.Output;
 
 namespace Admin.Core.FrameWork.Service.User
 {
@@ -45,6 +46,13 @@ namespace Admin.Core.FrameWork.Service.User
             _rolePermissionRepository = rolePermissionRepository;
         }
 
+        public async Task<ResponseOutput<AuthLoginOutput>> GetLoginUserAsync(long id)
+        {
+            var output = new ResponseOutput<AuthLoginOutput>();
+            var entityDto = await _userRepository.GetAsync<AuthLoginOutput>(id);
+            return output.Ok(entityDto);
+        }
+
         public async Task<ResponseOutput<UserGetOutput>> GetAsync(long id)
         {
             var res = new ResponseOutput<UserGetOutput>();

+ 1 - 1
Admin.Core.Tests/Controller/BaseControllerTest.cs

@@ -40,7 +40,7 @@ namespace Admin.Core.Tests.Controller
 
         public async Task Login(AuthLoginInput input = null)
         {
-            if(input == null && _appConfig.VarifyCode.Enabled)
+            if(input == null && _appConfig.VarifyCode.Enable)
             {
                 var res = await _authService.GetVerifyCodeAsync("") as IResponseOutput<AuthGetVerifyCodeOutput>;
                 var verifyCodeKey = string.Format(CacheKey.VerifyCodeKey, res.Data.Key);

+ 11 - 1
Admin.Core/Admin.Core.Common.xml

@@ -84,6 +84,11 @@
             姓名
             </summary>
         </member>
+        <member name="F:Admin.Core.Common.Auth.ClaimAttributes.RefreshExpires">
+            <summary>
+            刷新有效期
+            </summary>
+        </member>
         <member name="P:Admin.Core.Common.BaseModel.Entity`1.Id">
             <summary>
             编号
@@ -410,7 +415,7 @@
             验证码配置
             </summary>
         </member>
-        <member name="P:Admin.Core.Common.Configs.VarifyCodeConfig.Enabled">
+        <member name="P:Admin.Core.Common.Configs.VarifyCodeConfig.Enable">
             <summary>
             启用
             </summary>
@@ -535,6 +540,11 @@
             有效期(分钟)
             </summary>
         </member>
+        <member name="P:Admin.Core.Common.Configs.JwtConfig.RefreshExpires">
+            <summary>
+            刷新有效期(分钟)
+            </summary>
+        </member>
         <member name="T:Admin.Core.Common.Configs.UploadConfig">
             <summary>
             上传配置

+ 1 - 1
Admin.Core/Admin.Core.csproj

@@ -5,7 +5,7 @@
     <!--<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>-->
     <AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
     <GeneratePackageOnBuild>false</GeneratePackageOnBuild>
-    <Version>1.3.2</Version>
+    <Version>1.3.3</Version>
     <PackageLicenseExpression>MIT</PackageLicenseExpression>
     <Authors>xiaoxue</Authors>
     <Company>xiaoxue</Company>

+ 15 - 0
Admin.Core/Admin.Core.xml

@@ -133,6 +133,13 @@
             授权管理
             </summary>
         </member>
+        <member name="M:Admin.Core.Controllers.Admin.AuthController.GetToken(Admin.Core.Common.Output.ResponseOutput{Admin.Core.Service.Admin.Auth.Output.AuthLoginOutput})">
+            <summary>
+            获得token
+            </summary>
+            <param name="output"></param>
+            <returns></returns>
+        </member>
         <member name="M:Admin.Core.Controllers.Admin.AuthController.GetVerifyCode(System.String)">
             <summary>
             获取验证码
@@ -160,6 +167,14 @@
             <param name="input">登录信息</param>
             <returns></returns>
         </member>
+        <member name="M:Admin.Core.Controllers.Admin.AuthController.Refresh(System.String)">
+            <summary>
+            刷新Token
+            以旧换新
+            </summary>
+            <param name="token"></param>
+            <returns></returns>
+        </member>
         <member name="T:Admin.Core.Controllers.Admin.CacheController">
             <summary>
             缓存管理

+ 75 - 15
Admin.Core/Controllers/Admin/AuthController.cs

@@ -1,16 +1,21 @@
-using System.Threading.Tasks;
+using System;
+using System.Linq;
+using System.Diagnostics;
+using System.Threading.Tasks;
 using System.Security.Claims;
 using Microsoft.AspNetCore.Mvc;
 using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc.ModelBinding;
 using Admin.Core.Attributes;
+using Admin.Core.Common.Auth;
 using Admin.Core.Common.Output;
 using Admin.Core.Service.Admin.Auth;
 using Admin.Core.Service.Admin.Auth.Input;
 using Admin.Core.Service.Admin.Auth.Output;
-using Admin.Core.Common.Auth;
-using System.Diagnostics;
-using Admin.Core.Service.Admin.LoginLog.Input;
 using Admin.Core.Service.Admin.LoginLog;
+using Admin.Core.Service.Admin.LoginLog.Input;
+using Admin.Core.Common.Helpers;
+using Admin.Core.Service.Admin.User;
 
 namespace Admin.Core.Controllers.Admin
 {
@@ -21,19 +26,45 @@ namespace Admin.Core.Controllers.Admin
     {
         private readonly IUserToken _userToken;
         private readonly IAuthService _authService;
+        private readonly IUserService _userServices;
         private readonly ILoginLogService _loginLogService;
 
         public AuthController(
             IUserToken userToken,
             IAuthService authServices,
+            IUserService userServices,
             ILoginLogService loginLogService
         )
         {
             _userToken = userToken;
             _authService = authServices;
+            _userServices = userServices;
             _loginLogService = loginLogService;
         }
 
+        /// <summary>
+        /// 获得token
+        /// </summary>
+        /// <param name="output"></param>
+        /// <returns></returns>
+        private IResponseOutput GetToken(ResponseOutput<AuthLoginOutput> output)
+        {
+            if (!output.Success)
+            {
+                return ResponseOutput.NotOk(output.Msg);
+            }
+
+            var user = output.Data;
+            var token = _userToken.Build(new[]
+            {
+                new Claim(ClaimAttributes.UserId, user.Id.ToString()),
+                new Claim(ClaimAttributes.UserName, user.UserName),
+                new Claim(ClaimAttributes.UserNickName, user.NickName)
+            });
+
+            return ResponseOutput.Ok(new { token });
+        }
+
         /// <summary>
         /// 获取验证码
         /// </summary>
@@ -83,7 +114,7 @@ namespace Admin.Core.Controllers.Admin
         {
             var sw = new Stopwatch();
             sw.Start();
-            var res = (await _authService.LoginAsync(input)) as IResponseOutput;
+            var res = await _authService.LoginAsync(input);
             sw.Stop();
 
             #region 添加登录日志
@@ -95,10 +126,11 @@ namespace Admin.Core.Controllers.Admin
                 Msg = res.Msg
             };
 
-            AuthLoginOutput user = null;
+            ResponseOutput<AuthLoginOutput> output = null;
             if (res.Success)
             {
-                user = (res as IResponseOutput<AuthLoginOutput>).Data;
+                output = (res as ResponseOutput<AuthLoginOutput>);
+                var user = output.Data;
                 loginLogAddInput.CreatedUserId = user.Id;
                 loginLogAddInput.NickName = user.NickName;
             }
@@ -111,16 +143,44 @@ namespace Admin.Core.Controllers.Admin
                 return res;
             }
 
-            #region 生成token信息
-            var token = _userToken.Build(new[]
+            return GetToken(output);
+        }
+
+
+
+        /// <summary>
+        /// 刷新Token
+        /// 以旧换新
+        /// </summary>
+        /// <param name="token"></param>
+        /// <returns></returns>
+        [HttpGet]
+        [AllowAnonymous]
+        [NoOprationLog]
+        public async Task<IResponseOutput> Refresh([BindRequired] string token)
+        {
+            var userClaims = _userToken.Decode(token);
+            if(userClaims == null || userClaims.Length == 0)
             {
-                new Claim(ClaimAttributes.UserId, user.Id.ToString()),
-                new Claim(ClaimAttributes.UserName, user.UserName),
-                new Claim(ClaimAttributes.UserNickName, user.NickName)
-            }); 
-            #endregion
+                return ResponseOutput.NotOk();
+            }
 
-            return ResponseOutput.Ok(new { token });
+            var refreshExpiresValue = userClaims.FirstOrDefault(a => a.Type == ClaimAttributes.RefreshExpires).Value;
+            if (refreshExpiresValue.IsNull())
+            {
+                return ResponseOutput.NotOk();
+            }
+
+            var refreshExpires = refreshExpiresValue.ToDate();
+            if(refreshExpires <= DateTime.Now)
+            {
+                return ResponseOutput.NotOk("登录信息已过期");
+            }
+
+            var userId = userClaims.FirstOrDefault(a => a.Type == ClaimAttributes.UserId).Value;
+            var output = await _userServices.GetLoginUserAsync(userId.ToLong());
+
+            return GetToken(output);
         }
     }
 }

+ 0 - 1
Admin.Core/Controllers/Admin/UserController.cs

@@ -22,7 +22,6 @@ namespace Admin.Core.Controllers.Admin
         private readonly IUser _user;
         private readonly UploadConfig _uploadConfig;
         private readonly UploadHelper _uploadHelper;
-
         private readonly IUserService _userServices;
 
         public UserController(

File diff suppressed because it is too large
+ 0 - 0
Admin.Core/Db/Data/data.json


+ 2 - 2
Admin.Core/configs/appconfig.json

@@ -14,11 +14,11 @@
     "operation": true
   },
   //限流
-  "rateLimit": true,
+  "rateLimit": false,
   //验证码
   "varifyCode": {
     //启用
-    "enabled": true,
+    "enable": true,
     // 字体
     "font": [ "Times New Roman", "Verdana", "Arial", "Gungsuh", "Impact" ]
   }

+ 3 - 1
Admin.Core/configs/jwtconfig.json

@@ -6,5 +6,7 @@
   //密钥
   "securityKey": "ertJKl#521*a@790asD&1#",
   //有效期(分钟)
-  "expires": 120
+  "expires": 120,
+  //刷新有效期(分钟) 10080 = 7天
+  "refreshExpires": 10080
 }

Some files were not shown because too many files changed in this diff