AuthController.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. 
  2. using Microsoft.Extensions.Caching.Distributed;
  3. using OASystem.Infrastructure.Repositories.Login;
  4. using System.IdentityModel.Tokens.Jwt;
  5. using System.Security.Claims;
  6. using StackExchange.Redis;
  7. using OASystem.Domain.Dtos.UserDto;
  8. using OASystem.Domain.Entities.System;
  9. using OASystem.Domain;
  10. using OASystem.RedisRepository;
  11. namespace OASystem.API.Controllers
  12. {
  13. /// <summary>
  14. /// 鉴权相关
  15. /// </summary>
  16. [Route("api/")]
  17. public class AuthController : ControllerBase
  18. {
  19. private readonly IMapper _mapper;
  20. private readonly IConfiguration _config;
  21. private readonly LoginRepository _loginRep;
  22. public AuthController(IConfiguration config, LoginRepository loginRep, IMapper mapper)
  23. {
  24. _config = config;
  25. _loginRep = loginRep;
  26. _mapper = mapper;
  27. }
  28. /// <summary>
  29. /// 用户登录
  30. /// </summary>
  31. /// <param name="dto"></param>
  32. /// <returns></returns>
  33. [AllowAnonymous]
  34. [Route("login")]
  35. [HttpPost]
  36. [ProducesResponseType(typeof(LoginView), StatusCodes.Status200OK)]
  37. public async Task<IActionResult> LoginAsync(LoginDto dto)
  38. {
  39. #region 校验用户信息,假设此处我们已经校验成功
  40. var userData = _loginRep.Login(_loginRep, dto);
  41. if (userData.Result.Code != 0)
  42. {
  43. if (userData.Result.Code != 0) { return Ok(JsonView(false, userData.Result.Msg)); }
  44. return Ok(JsonView(false, "暂无该员工信息!"));
  45. }
  46. //人事审核是否通过
  47. if (userData.Result.Data.HrAudit != 1)
  48. {
  49. return Ok(JsonView(false, "该员工账号暂无登录权限,人事审核未通过!"));
  50. }
  51. //该用户是否已删除
  52. if (userData.Result.Data.HrAudit != 1)
  53. {
  54. return Ok(JsonView(false, "已离职员工没有登录权限"));
  55. }
  56. #endregion
  57. var view = new LoginView
  58. {
  59. Expires = DateTime.Now.AddMinutes(30)
  60. };
  61. string authorId = dto.Number + "Token";
  62. var claims = new[] { new Claim(ClaimTypes.NameIdentifier, "Future") };
  63. var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["JwtSecurityKey"]));
  64. var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
  65. var token = new JwtSecurityToken(
  66. issuer: "OASystem.com",
  67. audience: "OASystem.com",
  68. claims: claims,
  69. expires: view.Expires,
  70. signingCredentials: creds);
  71. view.Token = new JwtSecurityTokenHandler().WriteToken(token);
  72. //Redis String使用示例
  73. //TimeSpan ts = new TimeSpan(0, 30, 0);
  74. //await RedisRepository.RedisFactory.CreateRedisRepository().StringSetAsync<string>("key01", "value01", ts);//string 存
  75. //string redisString = await RedisRepository.RedisFactory.CreateRedisRepository().StringGetAsync<string>("key01");//string 取
  76. return Ok(JsonView(view));
  77. }
  78. /// <summary>
  79. /// 申请注册
  80. /// </summary>
  81. /// <param name="dto"></param>
  82. /// <returns></returns>
  83. [Authorize]
  84. [HttpPost]
  85. [Route("register")]
  86. public async Task<IActionResult> Register(RegisterDto dto)
  87. {
  88. var userData = _loginRep.Register(_loginRep, dto);
  89. if (userData.Result.Code != 0)
  90. {
  91. if (userData.Result.Code != 0) { return Ok(JsonView(false, userData.Result.Msg)); }
  92. return Ok(JsonView(false, "注册失败!"));
  93. }
  94. return Ok(new { Code = 0, Msg = userData.Result.Msg });
  95. }
  96. /// <summary>
  97. /// 修改密码
  98. /// </summary>
  99. /// <param name="dto"></param>
  100. /// <returns></returns>
  101. [Authorize]
  102. [HttpPost]
  103. [Route("UpdPassword")]
  104. public async Task<IActionResult> UpdateUserPassword(UpdateDto dto)
  105. {
  106. Result result = new Result();
  107. Sys_Users sys_Users = _mapper.Map<Sys_Users>(dto);
  108. var _UpdateState = await _loginRep.UpdateAsync(s => s.Id == dto.UserId, ss => sys_Users);
  109. if (_UpdateState)
  110. {
  111. result.Code = 0;
  112. result.Msg = "申请成功!人事主管审核后且信息部经理分配了登录账号,可登录OA!";
  113. }
  114. else
  115. {
  116. result.Code = -2;
  117. result.Msg = "用户修改失败!";
  118. }
  119. return Ok(JsonView(result));
  120. }
  121. /// <summary>
  122. /// 测试auth
  123. /// </summary>
  124. /// <param name="dto"></param>
  125. /// <returns></returns>
  126. [Authorize]
  127. [HttpPost("TestToken")]
  128. [ProducesResponseType(typeof(LoginView), StatusCodes.Status200OK)]
  129. public async Task<IActionResult> TestToken(LoginDto dto)
  130. {
  131. string authorId = dto.Number + "Token";
  132. // 从Redis里面取数据
  133. //string userToken = _redis.StringGet(authorId);
  134. string userToken = "";
  135. var view = new LoginView
  136. {
  137. Token = authorId + ":" + userToken
  138. };
  139. return Ok(JsonView(view));
  140. }
  141. }
  142. }