123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
-
- using Microsoft.Extensions.Caching.Distributed;
- using OASystem.Infrastructure.Repositories.Login;
- using System.IdentityModel.Tokens.Jwt;
- using System.Security.Claims;
- using StackExchange.Redis;
- using OASystem.Domain.Dtos.UserDto;
- using OASystem.Domain.Entities.System;
- using OASystem.Domain;
- namespace OASystem.API.Controllers
- {
- /// <summary>
- /// 鉴权相关
- /// </summary>
- [Route("api/")]
- public class AuthController : ControllerBase
- {
- private readonly IMapper _mapper;
- private readonly IConfiguration _config;
- private readonly LoginRepository _loginRep;
- //private IDatabase _redis;
- //private RedisHelper _redisHelper;
- public AuthController(IConfiguration config, LoginRepository loginRep, IMapper mapper)
- {
- _config = config;
- _loginRep = loginRep;
- _mapper = mapper;
- //_redis = client.GetDatabase(RedisEnum.Common);
- //_redisHelper = client("132.232.92.186", "7369", "123456");
- }
- /// <summary>
- /// 用户登录
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [AllowAnonymous]
- [Route("login")]
- [HttpPost]
- [ProducesResponseType(typeof(LoginView), StatusCodes.Status200OK)]
- public async Task<IActionResult> LoginAsync(LoginDto dto)
- {
- #region 校验用户信息,假设此处我们已经校验成功
- var userData = _loginRep.Login(_loginRep, dto);
- if (userData.Result.Code != 0)
- {
- if (userData.Result.Code != 0) { return Ok(JsonView(false, userData.Result.Message)); }
- return Ok(JsonView(false, "暂无该员工信息!"));
- }
- //人事审核是否通过
- if (userData.Result.Data.HrAudit != 1)
- {
- return Ok(JsonView(false, "该员工账号暂无登录权限,人事审核未通过!"));
- }
- //该用户是否已删除
- if (userData.Result.Data.HrAudit != 1)
- {
- return Ok(JsonView(false, "已离职员工没有登录权限"));
- }
- #endregion
- var view = new LoginView
- {
- Expires = DateTime.Now.AddMinutes(30)
- };
- string authorId = dto.Number + "Token";
- var claims = new[] { new Claim(ClaimTypes.NameIdentifier, "Future") };
- var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["JwtSecurityKey"]));
- var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
- var token = new JwtSecurityToken(
- issuer: "OASystem.com",
- audience: "OASystem.com",
- claims: claims,
- expires: view.Expires,
- signingCredentials: creds);
- view.Token = new JwtSecurityTokenHandler().WriteToken(token);
- return Ok(JsonView(view));
- }
- /// <summary>
- /// 申请注册
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [Authorize]
- [HttpPost]
- [Route("register")]
- public async Task<IActionResult> Register(RegisterDto dto)
- {
- var userData = _loginRep.Register(_loginRep, dto);
- if (userData.Result.Code != 0)
- {
- if (userData.Result.Code != 0) { return Ok(JsonView(false, userData.Result.Message)); }
- return Ok(JsonView(false, "注册失败!"));
- }
- return Ok(new { Code = 0, Msg = userData.Result.Message });
- }
- /// <summary>
- /// 修改密码
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [Authorize]
- [HttpPost]
- [Route("UpdPassword")]
- public async Task<IActionResult> UpdateUserPassword(UpdateDto dto)
- {
- Result result = new Result();
- Sys_Users sys_Users = _mapper.Map<Sys_Users>(dto);
- var _UpdateState = await _loginRep.UpdateAsync(s => s.Id == dto.UserId, ss => sys_Users);
- if (_UpdateState)
- {
- result.Code = 0;
- result.Message = "申请成功!人事主管审核后且信息部经理分配了登录账号,可登录OA!";
- }
- else
- {
- result.Code = -2;
- result.Message = "用户修改失败!";
- }
- return Ok(JsonView(result));
- }
- /// <summary>
- /// 测试auth
- /// </summary>
- /// <param name="dto"></param>
- /// <returns></returns>
- [Authorize]
- [HttpPost("TestToken")]
- [ProducesResponseType(typeof(LoginView), StatusCodes.Status200OK)]
- public async Task<IActionResult> TestToken(LoginDto dto)
- {
- string authorId = dto.Number + "Token";
- // 从Redis里面取数据
- //string userToken = _redis.StringGet(authorId);
- string userToken = "";
- var view = new LoginView
- {
- Token = authorId + ":" + userToken
- };
- return Ok(JsonView(view));
- }
- }
- }
|