LoginController

master
xiaochanghai 1 year ago
parent 02c3bfe401
commit bd535fe7f6
  1. 102
      Tiobon.Core.Api/Controllers/LoginController.cs
  2. 108
      Tiobon.Core.Tests/Controller_Test/LoginController_Should.cs

@ -4,6 +4,7 @@ using Microsoft.AspNetCore.Authentication.JwtBearer;
using System.IdentityModel.Tokens.Jwt; using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims; using System.Security.Claims;
using Tiobon.Core.Common.Swagger; using Tiobon.Core.Common.Swagger;
using Tiobon.Core.Services;
namespace Tiobon.Core.Controllers namespace Tiobon.Core.Controllers
@ -16,7 +17,7 @@ namespace Tiobon.Core.Controllers
[AllowAnonymous] [AllowAnonymous]
public class LoginController : BaseApiController public class LoginController : BaseApiController
{ {
readonly ISysUserInfoServices _sysUserInfoServices; readonly IGhrs_UserServices _ghrs_UserServices;
readonly IUserRoleServices _userRoleServices; readonly IUserRoleServices _userRoleServices;
readonly IRoleServices _roleServices; readonly IRoleServices _roleServices;
readonly PermissionRequirement _requirement; readonly PermissionRequirement _requirement;
@ -26,15 +27,15 @@ namespace Tiobon.Core.Controllers
/// <summary> /// <summary>
/// 构造函数注入 /// 构造函数注入
/// </summary> /// </summary>
/// <param name="sysUserInfoServices"></param> /// <param name="ghrs_UserServices"></param>
/// <param name="userRoleServices"></param> /// <param name="userRoleServices"></param>
/// <param name="roleServices"></param> /// <param name="roleServices"></param>
/// <param name="requirement"></param> /// <param name="requirement"></param>
/// <param name="roleModulePermissionServices"></param> /// <param name="roleModulePermissionServices"></param>
/// <param name="logger"></param> /// <param name="logger"></param>
public LoginController(ISysUserInfoServices sysUserInfoServices, IUserRoleServices userRoleServices, IRoleServices roleServices, PermissionRequirement requirement, IRoleModulePermissionServices roleModulePermissionServices, ILogger<LoginController> logger) public LoginController(IGhrs_UserServices ghrs_UserServices, IUserRoleServices userRoleServices, IRoleServices roleServices, PermissionRequirement requirement, IRoleModulePermissionServices roleModulePermissionServices, ILogger<LoginController> logger)
{ {
this._sysUserInfoServices = sysUserInfoServices; this._ghrs_UserServices = ghrs_UserServices;
this._userRoleServices = userRoleServices; this._userRoleServices = userRoleServices;
this._roleServices = roleServices; this._roleServices = roleServices;
_requirement = requirement; _requirement = requirement;
@ -59,16 +60,16 @@ namespace Tiobon.Core.Controllers
bool suc = false; bool suc = false;
//这里就是用户登陆以后,通过数据库去调取数据,分配权限的操作 //这里就是用户登陆以后,通过数据库去调取数据,分配权限的操作
var user = await _sysUserInfoServices.GetUserRoleNameStr(name, MD5Helper.MD5Encrypt32(pass)); //var user = await _sysUserInfoServices.GetUserRoleNameStr(name, MD5Helper.MD5Encrypt32(pass));
if (user != null) //if (user != null)
{ //{
TokenModelJwt tokenModel = new TokenModelJwt { Uid = 1, Role = user }; // TokenModelJwt tokenModel = new TokenModelJwt { Uid = 1, Role = user };
jwtStr = JwtHelper.IssueJwt(tokenModel); // jwtStr = JwtHelper.IssueJwt(tokenModel);
suc = true; // suc = true;
} //}
else //else
jwtStr = "login fail!!!"; // jwtStr = "login fail!!!";
return new ServiceResult<string>() return new ServiceResult<string>()
{ {
@ -137,42 +138,43 @@ namespace Tiobon.Core.Controllers
if (string.IsNullOrEmpty(name) || string.IsNullOrEmpty(pass)) if (string.IsNullOrEmpty(name) || string.IsNullOrEmpty(pass))
return Failed<TokenInfoViewModel>("用户名或密码不能为空"); return Failed<TokenInfoViewModel>("用户名或密码不能为空");
if (name != "Tiobonadmin" || pass != "Tiobonadmin")
return Failed<TokenInfoViewModel>("用户名或密码不能为空");
pass = MD5Helper.MD5Encrypt32(pass); pass = MD5Helper.MD5Encrypt32(pass);
name = "A1314";
var user = await _sysUserInfoServices.Query(d => var user = await _ghrs_UserServices.Query(d => d.UserNo == name && d.IsEnable == 1);
d.LoginName == name && d.LoginPWD == pass && d.IsDeleted == false);
if (user.Count > 0) if (user.Count > 0)
{ {
var userRoles = await _sysUserInfoServices.GetUserRoleNameStr(name, pass); //var userRoles = await _sysUserInfoServices.GetUserRoleNameStr(name, pass);
//如果是基于用户的授权策略,这里要添加用户;如果是基于角色的授权策略,这里要添加角色 //如果是基于用户的授权策略,这里要添加用户;如果是基于角色的授权策略,这里要添加角色
var claims = new List<Claim> var claims = new List<Claim>
{ {
new Claim(ClaimTypes.Name, user.FirstOrDefault().Id.ToString()), new Claim(ClaimTypes.Name, user.FirstOrDefault().UserId.ToString()),
new Claim(JwtRegisteredClaimNames.Jti, user.FirstOrDefault().Id.ToString()), new Claim(JwtRegisteredClaimNames.Jti, user.FirstOrDefault().UserId.ToString()),
new Claim("TenantId", user.FirstOrDefault().TenantId.ToString()), new Claim("TenantId", "0"),
new Claim(JwtRegisteredClaimNames.Iat, DateTime.Now.DateToTimeStamp()), new Claim(JwtRegisteredClaimNames.Iat, DateTime.Now.DateToTimeStamp()),
new Claim(ClaimTypes.Expiration, new Claim(ClaimTypes.Expiration,
DateTime.Now.AddSeconds(_requirement.Expiration.TotalSeconds).ToString()) DateTime.Now.AddSeconds(_requirement.Expiration.TotalSeconds).ToString())
}; };
claims.AddRange(userRoles.Split(',').Select(s => new Claim(ClaimTypes.Role, s))); //claims.AddRange(userRoles.Split(',').Select(s => new Claim(ClaimTypes.Role, s)));
// ids4和jwt切换 // ids4和jwt切换
// jwt // jwt
if (!Permissions.IsUseIds4) if (!Permissions.IsUseIds4)
{ {
var data = await _roleModulePermissionServices.RoleModuleMaps(); //var data = await _roleModulePermissionServices.RoleModuleMaps();
var list = (from item in data //var list = (from item in data
where item.IsDeleted == false // where item.IsDeleted == false
orderby item.Id // orderby item.Id
select new PermissionItem // select new PermissionItem
{ // {
Url = item.Module?.LinkUrl, // Url = item.Module?.LinkUrl,
Role = item.Role?.Name.ObjToString(), // Role = item.Role?.Name.ObjToString(),
}).ToList(); // }).ToList();
_requirement.Permissions = list; //_requirement.Permissions = list;
} }
var token = JwtToken.BuildJwtToken(claims.ToArray(), _requirement); var token = JwtToken.BuildJwtToken(claims.ToArray(), _requirement);
@ -206,24 +208,32 @@ namespace Tiobon.Core.Controllers
var tokenModel = JwtHelper.SerializeJwt(token); var tokenModel = JwtHelper.SerializeJwt(token);
if (tokenModel != null && JwtHelper.customSafeVerify(token) && tokenModel.Uid > 0) if (tokenModel != null && JwtHelper.customSafeVerify(token) && tokenModel.Uid > 0)
{ {
var user = await _sysUserInfoServices.QueryById(tokenModel.Uid); var user = await _ghrs_UserServices.QueryById(tokenModel.Uid);
var value = User.Claims.SingleOrDefault(s => s.Type == JwtRegisteredClaimNames.Iat)?.Value; var value = User.Claims.SingleOrDefault(s => s.Type == JwtRegisteredClaimNames.Iat)?.Value;
if (value != null && user.CriticalModifyTime > value.ObjToDate()) //if (value != null && user.CriticalModifyTime > value.ObjToDate())
return Failed<TokenInfoViewModel>("很抱歉,授权已失效,请重新授权!"); // return Failed<TokenInfoViewModel>("很抱歉,授权已失效,请重新授权!");
if (user != null && !(value != null && user.CriticalModifyTime > value.ObjToDate())) //if (user != null && !(value != null && user.CriticalModifyTime > value.ObjToDate()))
if (user != null)
{ {
var userRoles = await _sysUserInfoServices.GetUserRoleNameStr(user.LoginName, user.LoginPWD); //var userRoles = await _ghrs_UserServices.GetUserRoleNameStr(user.LoginName, user.LoginPWD);
//如果是基于用户的授权策略,这里要添加用户;如果是基于角色的授权策略,这里要添加角色 //如果是基于用户的授权策略,这里要添加用户;如果是基于角色的授权策略,这里要添加角色
var claims = new List<Claim> //var claims = new List<Claim>
{ //{
new Claim(ClaimTypes.Name, user.LoginName), // new Claim(ClaimTypes.Name, user.LoginName),
new Claim(JwtRegisteredClaimNames.Jti, tokenModel.Uid.ObjToString()), // new Claim(JwtRegisteredClaimNames.Jti, tokenModel.Uid.ObjToString()),
new Claim(JwtRegisteredClaimNames.Iat, DateTime.Now.DateToTimeStamp()), // new Claim(JwtRegisteredClaimNames.Iat, DateTime.Now.DateToTimeStamp()),
new Claim(ClaimTypes.Expiration, // new Claim(ClaimTypes.Expiration,
DateTime.Now.AddSeconds(_requirement.Expiration.TotalSeconds).ToString()) // DateTime.Now.AddSeconds(_requirement.Expiration.TotalSeconds).ToString())
}; //};
claims.AddRange(userRoles.Split(',').Select(s => new Claim(ClaimTypes.Role, s))); var claims = new List<Claim>{
new Claim(ClaimTypes.Name, user.UserId.ToString()),
new Claim(JwtRegisteredClaimNames.Jti, user.UserId.ToString()),
new Claim("TenantId", "0"),
new Claim(JwtRegisteredClaimNames.Iat, DateTime.Now.DateToTimeStamp()),
new Claim(ClaimTypes.Expiration, DateTime.Now.AddSeconds(_requirement.Expiration.TotalSeconds).ToString())
};
//claims.AddRange(userRoles.Split(',').Select(s => new Claim(ClaimTypes.Role, s)));
//用户标识 //用户标识
var identity = new ClaimsIdentity(JwtBearerDefaults.AuthenticationScheme); var identity = new ClaimsIdentity(JwtBearerDefaults.AuthenticationScheme);

@ -7,72 +7,72 @@ using Microsoft.Extensions.Logging;
namespace Tiobon.Core.Tests namespace Tiobon.Core.Tests
{ {
public class LoginController_Should public class LoginController_Should
{ {
LoginController loginController; LoginController loginController;
private readonly ISysUserInfoServices _sysUserInfoServices; private readonly IGhrs_UserServices _ghrs_UserServices;
private readonly IUserRoleServices _userRoleServices; private readonly IUserRoleServices _userRoleServices;
private readonly IRoleServices _roleServices; private readonly IRoleServices _roleServices;
private readonly PermissionRequirement _requirement; private readonly PermissionRequirement _requirement;
private readonly IRoleModulePermissionServices _roleModulePermissionServices; private readonly IRoleModulePermissionServices _roleModulePermissionServices;
private readonly ILogger<LoginController> _logger; private readonly ILogger<LoginController> _logger;
DI_Test dI_Test = new DI_Test(); DI_Test dI_Test = new DI_Test();
public LoginController_Should() public LoginController_Should()
{ {
var container = dI_Test.DICollections(); var container = dI_Test.DICollections();
_sysUserInfoServices = container.Resolve<ISysUserInfoServices>(); _ghrs_UserServices = container.Resolve<IGhrs_UserServices>();
_userRoleServices = container.Resolve<IUserRoleServices>(); _userRoleServices = container.Resolve<IUserRoleServices>();
_roleServices = container.Resolve<IRoleServices>(); _roleServices = container.Resolve<IRoleServices>();
_requirement = container.Resolve<PermissionRequirement>(); _requirement = container.Resolve<PermissionRequirement>();
_roleModulePermissionServices = container.Resolve<IRoleModulePermissionServices>(); _roleModulePermissionServices = container.Resolve<IRoleModulePermissionServices>();
_logger = container.Resolve<ILogger<LoginController>>(); _logger = container.Resolve<ILogger<LoginController>>();
loginController = new LoginController(_sysUserInfoServices, _userRoleServices, _roleServices, _requirement, loginController = new LoginController(_ghrs_UserServices, _userRoleServices, _roleServices, _requirement,
_roleModulePermissionServices, _logger); _roleModulePermissionServices, _logger);
} }
[Fact] [Fact]
public void GetJwtStrTest() public void GetJwtStrTest()
{ {
var data = loginController.GetJwtStr("test", "test"); var data = loginController.GetJwtStr("test", "test");
Assert.NotNull(data); Assert.NotNull(data);
} }
[Fact] [Fact]
public void GetJwtStrForNuxtTest() public void GetJwtStrForNuxtTest()
{ {
object Tiobons = loginController.GetJwtStrForNuxt("test", "test"); object Tiobons = loginController.GetJwtStrForNuxt("test", "test");
Assert.NotNull(Tiobons); Assert.NotNull(Tiobons);
} }
[Fact] [Fact]
public async void GetJwtToken3Test() public async void GetJwtToken3Test()
{ {
var res = await loginController.GetJwtToken3("test", "test"); var res = await loginController.GetJwtToken3("test", "test");
Assert.NotNull(res); Assert.NotNull(res);
} }
[Fact] [Fact]
public async void RefreshTokenTest() public async void RefreshTokenTest()
{ {
var res = await loginController.RefreshToken( var res = await loginController.RefreshToken(
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoidGVzdCIsImp0aSI6IjgiLCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dzLzIwMDgvMDYvaWRlbnRpdHkvY2xhaW1zL2V4cGlyYXRpb24iOiIyMDE5LzEwLzE4IDIzOjI2OjQ5IiwiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93cy8yMDA4LzA2L2lkZW50aXR5L2NsYWltcy9yb2xlIjoiQWRtaW5UZXN0IiwibmJmIjoxNTcxNDA4ODA5LCJleHAiOjE1NzE0MTI0MDksImlzcyI6IkJsb2cuQ29yZSIsImF1ZCI6IndyIn0.oz-SPz6UCL78fM09bUecw5rmjcNYEY9dWGtuPs2gdBg"); "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoidGVzdCIsImp0aSI6IjgiLCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dzLzIwMDgvMDYvaWRlbnRpdHkvY2xhaW1zL2V4cGlyYXRpb24iOiIyMDE5LzEwLzE4IDIzOjI2OjQ5IiwiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93cy8yMDA4LzA2L2lkZW50aXR5L2NsYWltcy9yb2xlIjoiQWRtaW5UZXN0IiwibmJmIjoxNTcxNDA4ODA5LCJleHAiOjE1NzE0MTI0MDksImlzcyI6IkJsb2cuQ29yZSIsImF1ZCI6IndyIn0.oz-SPz6UCL78fM09bUecw5rmjcNYEY9dWGtuPs2gdBg");
Assert.NotNull(res); Assert.NotNull(res);
} }
[Fact] [Fact]
public void Md5PasswordTest() public void Md5PasswordTest()
{ {
var res = loginController.Md5Password("test"); var res = loginController.Md5Password("test");
Assert.NotNull(res); Assert.NotNull(res);
} }
} }
} }
Loading…
Cancel
Save