|  | @@ -1,16 +1,21 @@
 | 
											
												
													
														|  | -using System.Threading.Tasks;
 |  | 
 | 
											
												
													
														|  | 
 |  | +using System;
 | 
											
												
													
														|  | 
 |  | +using System.Linq;
 | 
											
												
													
														|  | 
 |  | +using System.Diagnostics;
 | 
											
												
													
														|  | 
 |  | +using System.Threading.Tasks;
 | 
											
												
													
														|  |  using System.Security.Claims;
 |  |  using System.Security.Claims;
 | 
											
												
													
														|  |  using Microsoft.AspNetCore.Mvc;
 |  |  using Microsoft.AspNetCore.Mvc;
 | 
											
												
													
														|  |  using Microsoft.AspNetCore.Authorization;
 |  |  using Microsoft.AspNetCore.Authorization;
 | 
											
												
													
														|  | 
 |  | +using Microsoft.AspNetCore.Mvc.ModelBinding;
 | 
											
												
													
														|  |  using Admin.Core.Attributes;
 |  |  using Admin.Core.Attributes;
 | 
											
												
													
														|  | 
 |  | +using Admin.Core.Common.Auth;
 | 
											
												
													
														|  |  using Admin.Core.Common.Output;
 |  |  using Admin.Core.Common.Output;
 | 
											
												
													
														|  |  using Admin.Core.Service.Admin.Auth;
 |  |  using Admin.Core.Service.Admin.Auth;
 | 
											
												
													
														|  |  using Admin.Core.Service.Admin.Auth.Input;
 |  |  using Admin.Core.Service.Admin.Auth.Input;
 | 
											
												
													
														|  |  using Admin.Core.Service.Admin.Auth.Output;
 |  |  using Admin.Core.Service.Admin.Auth.Output;
 | 
											
												
													
														|  | -using Admin.Core.Common.Auth;
 |  | 
 | 
											
												
													
														|  | -using System.Diagnostics;
 |  | 
 | 
											
												
													
														|  | -using Admin.Core.Service.Admin.LoginLog.Input;
 |  | 
 | 
											
												
													
														|  |  using Admin.Core.Service.Admin.LoginLog;
 |  |  using Admin.Core.Service.Admin.LoginLog;
 | 
											
												
													
														|  | 
 |  | +using Admin.Core.Service.Admin.LoginLog.Input;
 | 
											
												
													
														|  | 
 |  | +using Admin.Core.Common.Helpers;
 | 
											
												
													
														|  | 
 |  | +using Admin.Core.Service.Admin.User;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  namespace Admin.Core.Controllers.Admin
 |  |  namespace Admin.Core.Controllers.Admin
 | 
											
												
													
														|  |  {
 |  |  {
 | 
											
										
											
												
													
														|  | @@ -21,19 +26,45 @@ namespace Admin.Core.Controllers.Admin
 | 
											
												
													
														|  |      {
 |  |      {
 | 
											
												
													
														|  |          private readonly IUserToken _userToken;
 |  |          private readonly IUserToken _userToken;
 | 
											
												
													
														|  |          private readonly IAuthService _authService;
 |  |          private readonly IAuthService _authService;
 | 
											
												
													
														|  | 
 |  | +        private readonly IUserService _userServices;
 | 
											
												
													
														|  |          private readonly ILoginLogService _loginLogService;
 |  |          private readonly ILoginLogService _loginLogService;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          public AuthController(
 |  |          public AuthController(
 | 
											
												
													
														|  |              IUserToken userToken,
 |  |              IUserToken userToken,
 | 
											
												
													
														|  |              IAuthService authServices,
 |  |              IAuthService authServices,
 | 
											
												
													
														|  | 
 |  | +            IUserService userServices,
 | 
											
												
													
														|  |              ILoginLogService loginLogService
 |  |              ILoginLogService loginLogService
 | 
											
												
													
														|  |          )
 |  |          )
 | 
											
												
													
														|  |          {
 |  |          {
 | 
											
												
													
														|  |              _userToken = userToken;
 |  |              _userToken = userToken;
 | 
											
												
													
														|  |              _authService = authServices;
 |  |              _authService = authServices;
 | 
											
												
													
														|  | 
 |  | +            _userServices = userServices;
 | 
											
												
													
														|  |              _loginLogService = loginLogService;
 |  |              _loginLogService = loginLogService;
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +        /// <summary>
 | 
											
												
													
														|  | 
 |  | +        /// 获得token
 | 
											
												
													
														|  | 
 |  | +        /// </summary>
 | 
											
												
													
														|  | 
 |  | +        /// <param name="output"></param>
 | 
											
												
													
														|  | 
 |  | +        /// <returns></returns>
 | 
											
												
													
														|  | 
 |  | +        private IResponseOutput GetToken(ResponseOutput<AuthLoginOutput> output)
 | 
											
												
													
														|  | 
 |  | +        {
 | 
											
												
													
														|  | 
 |  | +            if (!output.Success)
 | 
											
												
													
														|  | 
 |  | +            {
 | 
											
												
													
														|  | 
 |  | +                return ResponseOutput.NotOk(output.Msg);
 | 
											
												
													
														|  | 
 |  | +            }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +            var user = output.Data;
 | 
											
												
													
														|  | 
 |  | +            var token = _userToken.Build(new[]
 | 
											
												
													
														|  | 
 |  | +            {
 | 
											
												
													
														|  | 
 |  | +                new Claim(ClaimAttributes.UserId, user.Id.ToString()),
 | 
											
												
													
														|  | 
 |  | +                new Claim(ClaimAttributes.UserName, user.UserName),
 | 
											
												
													
														|  | 
 |  | +                new Claim(ClaimAttributes.UserNickName, user.NickName)
 | 
											
												
													
														|  | 
 |  | +            });
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +            return ResponseOutput.Ok(new { token });
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |          /// <summary>
 |  |          /// <summary>
 | 
											
												
													
														|  |          /// 获取验证码
 |  |          /// 获取验证码
 | 
											
												
													
														|  |          /// </summary>
 |  |          /// </summary>
 | 
											
										
											
												
													
														|  | @@ -83,7 +114,7 @@ namespace Admin.Core.Controllers.Admin
 | 
											
												
													
														|  |          {
 |  |          {
 | 
											
												
													
														|  |              var sw = new Stopwatch();
 |  |              var sw = new Stopwatch();
 | 
											
												
													
														|  |              sw.Start();
 |  |              sw.Start();
 | 
											
												
													
														|  | -            var res = (await _authService.LoginAsync(input)) as IResponseOutput;
 |  | 
 | 
											
												
													
														|  | 
 |  | +            var res = await _authService.LoginAsync(input);
 | 
											
												
													
														|  |              sw.Stop();
 |  |              sw.Stop();
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |              #region 添加登录日志
 |  |              #region 添加登录日志
 | 
											
										
											
												
													
														|  | @@ -95,10 +126,11 @@ namespace Admin.Core.Controllers.Admin
 | 
											
												
													
														|  |                  Msg = res.Msg
 |  |                  Msg = res.Msg
 | 
											
												
													
														|  |              };
 |  |              };
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -            AuthLoginOutput user = null;
 |  | 
 | 
											
												
													
														|  | 
 |  | +            ResponseOutput<AuthLoginOutput> output = null;
 | 
											
												
													
														|  |              if (res.Success)
 |  |              if (res.Success)
 | 
											
												
													
														|  |              {
 |  |              {
 | 
											
												
													
														|  | -                user = (res as IResponseOutput<AuthLoginOutput>).Data;
 |  | 
 | 
											
												
													
														|  | 
 |  | +                output = (res as ResponseOutput<AuthLoginOutput>);
 | 
											
												
													
														|  | 
 |  | +                var user = output.Data;
 | 
											
												
													
														|  |                  loginLogAddInput.CreatedUserId = user.Id;
 |  |                  loginLogAddInput.CreatedUserId = user.Id;
 | 
											
												
													
														|  |                  loginLogAddInput.NickName = user.NickName;
 |  |                  loginLogAddInput.NickName = user.NickName;
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
										
											
												
													
														|  | @@ -111,16 +143,44 @@ namespace Admin.Core.Controllers.Admin
 | 
											
												
													
														|  |                  return res;
 |  |                  return res;
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -            #region 生成token信息
 |  | 
 | 
											
												
													
														|  | -            var token = _userToken.Build(new[]
 |  | 
 | 
											
												
													
														|  | 
 |  | +            return GetToken(output);
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        /// <summary>
 | 
											
												
													
														|  | 
 |  | +        /// 刷新Token
 | 
											
												
													
														|  | 
 |  | +        /// 以旧换新
 | 
											
												
													
														|  | 
 |  | +        /// </summary>
 | 
											
												
													
														|  | 
 |  | +        /// <param name="token"></param>
 | 
											
												
													
														|  | 
 |  | +        /// <returns></returns>
 | 
											
												
													
														|  | 
 |  | +        [HttpGet]
 | 
											
												
													
														|  | 
 |  | +        [AllowAnonymous]
 | 
											
												
													
														|  | 
 |  | +        [NoOprationLog]
 | 
											
												
													
														|  | 
 |  | +        public async Task<IResponseOutput> Refresh([BindRequired] string token)
 | 
											
												
													
														|  | 
 |  | +        {
 | 
											
												
													
														|  | 
 |  | +            var userClaims = _userToken.Decode(token);
 | 
											
												
													
														|  | 
 |  | +            if(userClaims == null || userClaims.Length == 0)
 | 
											
												
													
														|  |              {
 |  |              {
 | 
											
												
													
														|  | -                new Claim(ClaimAttributes.UserId, user.Id.ToString()),
 |  | 
 | 
											
												
													
														|  | -                new Claim(ClaimAttributes.UserName, user.UserName),
 |  | 
 | 
											
												
													
														|  | -                new Claim(ClaimAttributes.UserNickName, user.NickName)
 |  | 
 | 
											
												
													
														|  | -            }); 
 |  | 
 | 
											
												
													
														|  | -            #endregion
 |  | 
 | 
											
												
													
														|  | 
 |  | +                return ResponseOutput.NotOk();
 | 
											
												
													
														|  | 
 |  | +            }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -            return ResponseOutput.Ok(new { token });
 |  | 
 | 
											
												
													
														|  | 
 |  | +            var refreshExpiresValue = userClaims.FirstOrDefault(a => a.Type == ClaimAttributes.RefreshExpires).Value;
 | 
											
												
													
														|  | 
 |  | +            if (refreshExpiresValue.IsNull())
 | 
											
												
													
														|  | 
 |  | +            {
 | 
											
												
													
														|  | 
 |  | +                return ResponseOutput.NotOk();
 | 
											
												
													
														|  | 
 |  | +            }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +            var refreshExpires = refreshExpiresValue.ToDate();
 | 
											
												
													
														|  | 
 |  | +            if(refreshExpires <= DateTime.Now)
 | 
											
												
													
														|  | 
 |  | +            {
 | 
											
												
													
														|  | 
 |  | +                return ResponseOutput.NotOk("登录信息已过期");
 | 
											
												
													
														|  | 
 |  | +            }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +            var userId = userClaims.FirstOrDefault(a => a.Type == ClaimAttributes.UserId).Value;
 | 
											
												
													
														|  | 
 |  | +            var output = await _userServices.GetLoginUserAsync(userId.ToLong());
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +            return GetToken(output);
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  }
 |  |  }
 |