|  | @@ -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 Microsoft.AspNetCore.Mvc;
 | 
	
		
			
				|  |  |  using Microsoft.AspNetCore.Authorization;
 | 
	
		
			
				|  |  | +using Microsoft.AspNetCore.Mvc.ModelBinding;
 | 
	
		
			
				|  |  |  using Admin.Core.Attributes;
 | 
	
		
			
				|  |  | +using Admin.Core.Common.Auth;
 | 
	
		
			
				|  |  |  using Admin.Core.Common.Output;
 | 
	
		
			
				|  |  |  using Admin.Core.Service.Admin.Auth;
 | 
	
		
			
				|  |  |  using Admin.Core.Service.Admin.Auth.Input;
 | 
	
		
			
				|  |  |  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.Input;
 | 
	
		
			
				|  |  | +using Admin.Core.Common.Helpers;
 | 
	
		
			
				|  |  | +using Admin.Core.Service.Admin.User;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  namespace Admin.Core.Controllers.Admin
 | 
	
		
			
				|  |  |  {
 | 
	
	
		
			
				|  | @@ -21,19 +26,45 @@ namespace Admin.Core.Controllers.Admin
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  |          private readonly IUserToken _userToken;
 | 
	
		
			
				|  |  |          private readonly IAuthService _authService;
 | 
	
		
			
				|  |  | +        private readonly IUserService _userServices;
 | 
	
		
			
				|  |  |          private readonly ILoginLogService _loginLogService;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          public AuthController(
 | 
	
		
			
				|  |  |              IUserToken userToken,
 | 
	
		
			
				|  |  |              IAuthService authServices,
 | 
	
		
			
				|  |  | +            IUserService userServices,
 | 
	
		
			
				|  |  |              ILoginLogService loginLogService
 | 
	
		
			
				|  |  |          )
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  |              _userToken = userToken;
 | 
	
		
			
				|  |  |              _authService = authServices;
 | 
	
		
			
				|  |  | +            _userServices = userServices;
 | 
	
		
			
				|  |  |              _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>
 | 
	
	
		
			
				|  | @@ -83,7 +114,7 @@ namespace Admin.Core.Controllers.Admin
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  |              var sw = new Stopwatch();
 | 
	
		
			
				|  |  |              sw.Start();
 | 
	
		
			
				|  |  | -            var res = (await _authService.LoginAsync(input)) as IResponseOutput;
 | 
	
		
			
				|  |  | +            var res = await _authService.LoginAsync(input);
 | 
	
		
			
				|  |  |              sw.Stop();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              #region 添加登录日志
 | 
	
	
		
			
				|  | @@ -95,10 +126,11 @@ namespace Admin.Core.Controllers.Admin
 | 
	
		
			
				|  |  |                  Msg = res.Msg
 | 
	
		
			
				|  |  |              };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            AuthLoginOutput user = null;
 | 
	
		
			
				|  |  | +            ResponseOutput<AuthLoginOutput> output = null;
 | 
	
		
			
				|  |  |              if (res.Success)
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  | -                user = (res as IResponseOutput<AuthLoginOutput>).Data;
 | 
	
		
			
				|  |  | +                output = (res as ResponseOutput<AuthLoginOutput>);
 | 
	
		
			
				|  |  | +                var user = output.Data;
 | 
	
		
			
				|  |  |                  loginLogAddInput.CreatedUserId = user.Id;
 | 
	
		
			
				|  |  |                  loginLogAddInput.NickName = user.NickName;
 | 
	
		
			
				|  |  |              }
 | 
	
	
		
			
				|  | @@ -111,16 +143,44 @@ namespace Admin.Core.Controllers.Admin
 | 
	
		
			
				|  |  |                  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);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  }
 |