AuthController.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  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. namespace OASystem.API.Controllers
  9. {
  10. /// <summary>
  11. /// 鉴权相关
  12. /// </summary>
  13. [Route("api/[action]")]
  14. public class AuthController : ControllerBase
  15. {
  16. private readonly IMapper _mapper;
  17. private readonly IConfiguration _config;
  18. private readonly LoginRepository _loginRep;
  19. //private IDatabase _redis;
  20. //private RedisHelper _redisHelper;
  21. public AuthController(IConfiguration config, LoginRepository loginRep, IMapper mapper)
  22. {
  23. _config = config;
  24. _loginRep = loginRep;
  25. _mapper = mapper;
  26. //_redis = client.GetDatabase(RedisEnum.Common);
  27. //_redisHelper = client("132.232.92.186", "7369", "123456");
  28. }
  29. /// <summary>
  30. /// 用户登录
  31. /// </summary>
  32. /// <param name="dto"></param>
  33. /// <returns></returns>
  34. [AllowAnonymous]
  35. [HttpPost("login")]
  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.Message)); }
  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里面存入数据
  73. //_redis.StringSet(authorId, view.Token);
  74. // 从Redis里面取数据
  75. //string name = _redis.StringGet(authorId);
  76. return Ok(JsonView(view));
  77. }
  78. /// <summary>
  79. /// 申请注册
  80. /// </summary>
  81. /// <param name="dto"></param>
  82. /// <returns></returns>
  83. [Authorize]
  84. [HttpPost("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. /// 测试auth
  97. /// </summary>
  98. /// <param name="dto"></param>
  99. /// <returns></returns>
  100. [Authorize]
  101. [HttpPost("TestToken")]
  102. [ProducesResponseType(typeof(LoginView), StatusCodes.Status200OK)]
  103. public async Task<IActionResult> TestToken(LoginDto dto)
  104. {
  105. string authorId = dto.Number + "Token";
  106. // 从Redis里面取数据
  107. //string userToken = _redis.StringGet(authorId);
  108. string userToken = "";
  109. var view = new LoginView
  110. {
  111. Token = authorId + ":" + userToken
  112. };
  113. return Ok(JsonView(view));
  114. }
  115. }
  116. }