AuthController.cs 5.0 KB

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