Browse Source

修改 登录 加入redis

leiy 2 years ago
parent
commit
6349d2aad6

+ 31 - 11
OASystem/OASystem.Api/Controllers/AuthController.cs

@@ -6,6 +6,8 @@ using System.Security.Claims;
 using StackExchange.Redis;
 using OASystem.Domain.Dtos.UserDto;
 using OASystem.RedisRepository;
+using OASystem.RedisRepository.RedisAsyncHelper;
+using Google.Protobuf.WellKnownTypes;
 
 namespace OASystem.API.Controllers
 {
@@ -18,7 +20,6 @@ namespace OASystem.API.Controllers
         private readonly IMapper _mapper;
         private readonly IConfiguration _config;
         private readonly LoginRepository _loginRep;
-        private readonly UsersRepository _usersRepository;
         //private IDatabase _redis;
         //private RedisHelper _redisHelper;
         public AuthController(IConfiguration config, LoginRepository loginRep, IMapper mapper)
@@ -26,7 +27,6 @@ namespace OASystem.API.Controllers
             _config = config;
             _loginRep = loginRep;
             _mapper = mapper;
-            //_usersRepository = usersRepository;
         }
 
         /// <summary>
@@ -43,20 +43,37 @@ namespace OASystem.API.Controllers
             var userData = _loginRep.Login(dto);
             if (userData.Result.Code != 0)
             {
-                if (userData.Result.Code != 0) { return Ok(JsonView(false, userData.Result.Msg)); }
-
-                return Ok(JsonView(false, "暂无该员工信息!"));
+                return Ok(JsonView(false, userData.Result.Msg));
             }
 
             #endregion
+            string userToken = dto.Number + "Token";
+            string userTokenString = await RedisRepository.RedisFactory.CreateRedisRepository().StringGetAsync<string>(userToken);//string 取
+
+            if (userTokenString != null)
+            {
+                var lifeTime = new JwtSecurityTokenHandler().ReadToken(userTokenString).ValidTo;
+
+
+                var redisView = new LoginView
+                {
+                    //Expires = createTokenDt.AddMinutes(30),
+                    UserInfo = userData.Result.Data,
+                    Token = userTokenString
+                };
+                return Ok(JsonView(redisView));
+            }
+            
+
+
+
+            DateTime createTokenDt = DateTime.Now;
             var view = new LoginView
             {
-                Expires = DateTime.Now.AddMinutes(30),
+                Expires = createTokenDt.AddMinutes(30),
                 UserInfo = userData.Result.Data
             };
 
-            string authorId = dto.Number + "Token";
-
             var claims = new[] { new Claim(ClaimTypes.NameIdentifier, "Future") };
             var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["JwtSecurityKey"]));
             var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
@@ -68,10 +85,13 @@ namespace OASystem.API.Controllers
                 signingCredentials: creds);
             view.Token = new JwtSecurityTokenHandler().WriteToken(token);
 
+            
+            TimeSpan ExpiresTimeSpan = view.Expires - createTokenDt;
+
             //Redis  String使用示例
-            //TimeSpan ts = new TimeSpan(0, 30, 0);
-            //await RedisRepository.RedisFactory.CreateRedisRepository().StringSetAsync<string>("key01", "value01", ts);//string 存
-            //string redisString = await RedisRepository.RedisFactory.CreateRedisRepository().StringGetAsync<string>("key01");//string 取
+            TimeSpan ts = new TimeSpan(0, 30, 0);
+            await RedisRepository.RedisFactory.CreateRedisRepository().StringSetAsync<string>(userToken, view.Token, ExpiresTimeSpan);//string 存
+            
 
             return Ok(JsonView(view));
         }

+ 23 - 23
OASystem/OASystem.Api/Controllers/SystemController.cs

@@ -7,7 +7,7 @@ namespace OASystem.API.Controllers
     /// <summary>
     /// 系统设置
     /// </summary>
-    [Authorize]
+    
     [Route("api/[controller]/[action]")]
     public class SystemController : ControllerBase
     {
@@ -199,8 +199,8 @@ namespace OASystem.API.Controllers
                 return Ok(JsonView(false, "程序错误!"));
                 throw;
             }
-           
-            
+
+
 
         }
         #endregion
@@ -210,27 +210,27 @@ namespace OASystem.API.Controllers
         /// <summary>
         /// 查询部门数据
         /// </summary>
-        /// <param name="dto"></param>
+        /// <param name = "dto" ></param>
         /// <returns></returns>
-        //[Authorize]
+        [Authorize]
         [HttpPost]
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
         public async Task<IActionResult> QueryDepartmentList(DepartmentDto dto)
         {
             try
             {
-                if (dto.PortType==1)
+                if (dto.PortType == 1)
                 {
                     return Ok(JsonView(false, "暂无数据!"));
                 }
-                else if (dto.PortType==2)
+                else if (dto.PortType == 2)
                 {
                     var result = _sysDepRep.QueryDto<Sys_Department, DepartmentIView>(s => s.CompanyId == dto.CompanyId).ToList();
                     if (result.Count == 0)
                     {
                         return Ok(JsonView(false, "暂无数据!"));
                     }
-                    return Ok(JsonView(true,"查询成功!",result));
+                    return Ok(JsonView(true, "查询成功!", result));
                 }
                 else if (dto.PortType == 3)
                 {
@@ -246,12 +246,12 @@ namespace OASystem.API.Controllers
                 return Ok(JsonView(false, "程序错误!"));
                 throw;
             }
-         
+
         }
         /// <summary>
         /// 部门添加
         /// </summary>
-        /// <param name="dto"></param>
+        /// <param name = "dto" ></param>
         /// <returns></returns>
         [HttpPost]
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
@@ -279,22 +279,22 @@ namespace OASystem.API.Controllers
                 return Ok(JsonView(false, "程序错误!"));
                 throw;
             }
-            
-           
+
+
         }
 
         /// <summary>
         /// 部门修改
         /// </summary>
-        /// <param name="dto"></param>
-        /// <returns></returns>
+        /// <param name = "dto" ></param>
+        /// <returns ></returns>
         [HttpPost]
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
         public async Task<IActionResult> EditDepartment(EditDepartmentDto dto)
         {
             try
             {
-                if (dto.Id==0 || string.IsNullOrWhiteSpace(dto.DepName) || dto.CompanyId == 0 || string.IsNullOrWhiteSpace(dto.DepCode))
+                if (dto.Id == 0 || string.IsNullOrWhiteSpace(dto.DepName) || dto.CompanyId == 0 || string.IsNullOrWhiteSpace(dto.DepCode))
                 {
                     return Ok(JsonView(false, "请检查信息是否输入完整!"));
                 }
@@ -302,12 +302,12 @@ namespace OASystem.API.Controllers
                 {
                     bool res = await _sysDepRep.UpdateAsync<Sys_Department>(a => a.Id == dto.Id, a => new Sys_Department
                     {
-                        CompanyId=dto.CompanyId,
-                        DepCode=dto.DepCode,
-                        DepName=dto.DepName,
-                        ParentDepId=dto.ParentDepId,
-                        Remark=dto.Remark,
-    });
+                        CompanyId = dto.CompanyId,
+                        DepCode = dto.DepCode,
+                        DepName = dto.DepName,
+                        ParentDepId = dto.ParentDepId,
+                        Remark = dto.Remark,
+                    });
                     if (!res)
                     {
                         return Ok(JsonView(false, "修改失败!"));
@@ -327,7 +327,7 @@ namespace OASystem.API.Controllers
         /// <summary>
         /// 部门删除
         /// </summary>
-        /// <param name="dto"></param>
+        /// <param name = "dto" ></param>
         /// <returns></returns>
         [HttpPost]
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
@@ -341,7 +341,7 @@ namespace OASystem.API.Controllers
                 }
                 else
                 {
-                    bool res =await _sysDepRep.SoftDeleteAsync<Sys_Department>(dto.Id.ToString());
+                    bool res = await _sysDepRep.SoftDeleteAsync<Sys_Department>(dto.Id.ToString());
                     if (!res)
                     {
                         return Ok(JsonView(false, "删除失败!"));

+ 9 - 2
OASystem/OASystem.Api/OASystemAuthentication.cs

@@ -1,6 +1,13 @@
-namespace OASystem.API
+using Microsoft.AspNetCore.Mvc.Filters;
+using Microsoft.IdentityModel.Tokens;
+using System.IdentityModel.Tokens.Jwt;
+using IAuthorizationFilter = Microsoft.AspNetCore.Mvc.Filters.IAuthorizationFilter;
+
+namespace OASystem.API
 {
-    public class OASystemAuthentication
+    public class OASystemAuthentication : AuthorizeAttribute
     {
+
+
     }
 }

+ 22 - 4
OASystem/OASystem.Api/Program.cs

@@ -1,9 +1,13 @@
 
 using StackExchange.Redis;
 using Autofac.Core;
+using OASystem.API;
+using OASystem.RedisRepository.RedisAsyncHelper;
+using OASystem.RedisRepository.Config;
 
 var builder = WebApplication.CreateBuilder(args);
 var basePath = AppContext.BaseDirectory;
+
 //引入配置文件
 var _config = new ConfigurationBuilder()
                  .SetBasePath(basePath)
@@ -14,11 +18,21 @@ builder.Services.AddSingleton(new AppSettingsHelper(_config));
 // Add services to the container.
 builder.Services.AddControllersWithViews();
 
-#region redis
+#region Cors
+
+builder.Services.AddCors(policy =>
+{
+    policy.AddPolicy("Cors", opt => opt
+    .AllowAnyOrigin()
+    .AllowAnyHeader()
+    .AllowAnyMethod()
+    .WithExposedHeaders("X-Pagination"));
+});
 
 #endregion
 
 
+
 #region 接口分组
 var groups = new List<Tuple<string, string>>
 {
@@ -124,6 +138,8 @@ if (AppSettingsHelper.Get("UseSwagger").ToBool())
 #endregion
 
 #region 添加校验
+
+//builder.Services.AddTransient<OASystemAuthentication>();
 builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(options =>
 {
     options.TokenValidationParameters = new TokenValidationParameters
@@ -135,6 +151,8 @@ builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJw
         ValidAudience = "OASystem.com",
         ValidIssuer = "OASystem.com",
         IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["JwtSecurityKey"])),
+        ClockSkew = TimeSpan.FromSeconds(30), //过期时间容错值,解决服务器端时间不同步问题(秒)
+        RequireExpirationTime = true,
     };
 });
 #endregion
@@ -183,9 +201,9 @@ if (!app.Environment.IsDevelopment())
 app.UseStaticFiles();
 
 app.UseRouting();
-app.UseAuthentication();
-app.UseAuthorization();
-
+app.UseAuthentication(); // 认证
+app.UseAuthorization();  // 授权
+app.UseCors("Cors");  //Cors
 
 #region 启用swaggerUI
 if (AppSettingsHelper.Get("UseSwagger").ToBool())

+ 1 - 1
OASystem/OASystem.Api/appsettings.json

@@ -3,6 +3,6 @@
     "OA2023DB": "server=132.232.92.186;uid=sa;pwd=Yjx@158291;database=OA2023DB;"
   },
   "JwtSecurityKey": "48d3f4fe770940a1068052f581536b81", //jwt密钥
-  "UseSwagger": "true", //启用Swagger
+  "UseSwagger": "true" //启用Swagger
 
 }

+ 2 - 2
OASystem/OASystem.Domain/AutoMappers/_baseMappingProfile.cs

@@ -24,8 +24,8 @@ namespace OASystem.Domain.AutoMappers
 
             #region 部门板块
             CreateMap<Sys_Department, DepartmentIView>();
-            CreateMap<AddDepartmentDto,Sys_Department>();
-            CreateMap<EditDepartmentDto,Sys_Department>();
+            CreateMap<AddDepartmentDto, Sys_Department>();
+            CreateMap<EditDepartmentDto, Sys_Department>();
             #endregion
 
             #region 用户板块

+ 4 - 1
OASystem/OASystem.Domain/Entities/Groups/Grp_DeleClientNeeds.cs

@@ -29,8 +29,11 @@ namespace OASystem.Domain.Entities.Groups
         public string HotelAddress { get; set; }
         /// <summary>
         /// 酒店星级
+        /// 一星 二星级 三星 四星  
+        /// 普通五星 精品五星 奢华五星 豪华五星
+        /// 多个 普通五星|豪华五星
         /// </summary>
-        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(20)")]
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(100)")]
         public string HotelStarRank { get; set; }
         /// <summary>
         /// 酒店其他需求

+ 10 - 9
OASystem/OASystem.Domain/Entities/Groups/Grp_DelegationInfo.cs

@@ -7,7 +7,7 @@ using System.Threading.Tasks;
 namespace OASystem.Domain.Entities.Groups
 {
     /// <summary>
-    /// 团组表
+    /// 团组信息
     /// </summary>
     [SugarTable("Grp_DelegationInfo")]
     public class Grp_DelegationInfo:EntityBase
@@ -65,7 +65,7 @@ namespace OASystem.Domain.Entities.Groups
         /// <summary>
         /// 出访国家
         /// </summary>
-        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(100)")]
         public string VisitCountry { get; set; }
         /// <summary>
         /// 出访目的
@@ -125,10 +125,11 @@ namespace OASystem.Domain.Entities.Groups
         /// <summary>
         /// 预算成本
         /// </summary>
-        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
-        public string BudgetCost { get; set; }
+        [SugarColumn(IsNullable = true, ColumnDataType = "decimal(10,2)")]
+        public decimal BudgetCost { get; set; }
         /// <summary>
-        /// 是否操作完成 0否1是
+        /// 是否操作完成 
+        /// 0否1是
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "int")]
         public int IsSure { get; set; }
@@ -140,12 +141,12 @@ namespace OASystem.Domain.Entities.Groups
         /// <summary>
         /// 手机号
         /// </summary>
-        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(20)")]
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(500)")]
         public string TellPhone { get; set; }
         /// <summary>
         /// 团组客户级别
         /// </summary>
-        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
+        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(100)")]
         public string TeamLev { get; set; }
         /// <summary>
         /// 酒店投诉标识 0-未投诉1-已投诉
@@ -185,8 +186,8 @@ namespace OASystem.Domain.Entities.Groups
         /// <summary>
         /// 支付款项(预付)
         /// </summary>
-        [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
-        public string PaymentMoney { get; set; }
+        [SugarColumn(IsNullable = true, ColumnDataType = "decimal(10,2)")]
+        public decimal PaymentMoney { get; set; }
         /// <summary>
         /// 预付期限
         /// </summary>

+ 8 - 3
OASystem/OASystem.Infrastructure/Repositories/Login/LoginRepository.cs

@@ -27,14 +27,19 @@ namespace OASystem.Infrastructure.Repositories.Login
         public async Task<Result> Login(LoginDto loginDto)
         {
             Result result = new Result() { Code = -2 };
-            string SQLWhere = string.Format("Where Number='{0}' And Password='{1}'", loginDto.Number, loginDto.Password);
+            string SQLWhere = string.Format("Where Number='{0}'", loginDto.Number);
             string sql = string.Format("Select * From Sys_Users With(NoLock) {0}", SQLWhere);
             Sys_Users _entity = await GetSingleInfoBySqlWithNolockAsync(sql);
 
-
             if (_entity == null)
             {
-                result.Msg = "暂无该账号信息!";
+                result.Msg = "暂无该账户信息!";
+                return result;
+            }
+
+            if (_entity.Password != loginDto.Password)
+            {
+                result.Msg = "账户或密码错误!";
                 return result;
             }