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