LoginController

master
xiaochanghai 1 year ago
parent 02c3bfe401
commit bd535fe7f6
  1. 98
      Tiobon.Core.Api/Controllers/LoginController.cs
  2. 6
      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(ClaimTypes.Expiration,
// DateTime.Now.AddSeconds(_requirement.Expiration.TotalSeconds).ToString())
//};
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(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)));
//用户标识 //用户标识
var identity = new ClaimsIdentity(JwtBearerDefaults.AuthenticationScheme); var identity = new ClaimsIdentity(JwtBearerDefaults.AuthenticationScheme);

@ -11,7 +11,7 @@ namespace Tiobon.Core.Tests
{ {
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;
@ -24,13 +24,13 @@ namespace Tiobon.Core.Tests
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);
} }

Loading…
Cancel
Save