|
@@ -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);
|
|
|
}
|
|
|
}
|
|
|
}
|