AuthController.cs 5.2 KB

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