using BPA.SAAS.Manage.Application.Auth.Dtos;
using BPA.SAAS.Manage.Comm.Const;
using BPA.SAAS.Manage.Comm.Enum;
using BPA.SAAS.Manage.Core.Org;
using Mapster;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BPA.SAAS.Manage.Application.Auth
{
public class AuthService : IAuthService, IDynamicApiController
{
private readonly ISqlSugarClient _db;
private readonly IHttpContextAccessor _httpContextAccessor;
public AuthService(ISqlSugarClient db, IHttpContextAccessor httpContextAccessor)
{
_db = db;
_httpContextAccessor = httpContextAccessor;
}
///
/// 用户名密码登录
///
/// 1平台用户登录,0加盟商登录
///
///
[HttpPost("/api/auth/login")]
[AllowAnonymous]
public async Task Login([FromHeader] string logintype, [Required] LoginInput input)
{
// 获取加密后的密码
var encryptPasswod = MD5Encryption.Encrypt(input.Password).ToLower();
// 判断用户名和密码是否正确 忽略全局过滤器
var user = await _db.Queryable().Where(u => u.Account.Equals(input.Account)
&& u.Password.Equals(encryptPasswod)
&& u.IsDeleted == 0
).FirstAsync();
_ = user ?? throw Oops.Oh("用户名或密码不正确");
//获取权限
List conModels = new List();
conModels.Add(new ConditionalModel() { FieldName = "Id", ConditionalType = ConditionalType.Equal, FieldValue = user.GroupId });
conModels.Add(new ConditionalModel() { FieldName = "Status", ConditionalType = ConditionalType.Equal, FieldValue = CommonStatus.ENABLE.ToString() });
conModels.Add(new ConditionalModel() { FieldName = "IsDeleted", ConditionalType = ConditionalType.Equal, FieldValue ="0" });
var company = _db.Queryable().Where(conModels).First();
string CLAINM_SUPERADMIN = "Customer";
if (user.AdminType == 1)
{
CLAINM_SUPERADMIN = "1";
}
_ = company ?? throw Oops.Oh("企业被锁定,请联系管理员");
var accessToken = JWTEncryption.Encrypt(new Dictionary
{
{ ClaimConst.CLAINM_USERID, user.Id },
{ ClaimConst.LoginType, 0},
{ ClaimConst.CLAINM_ACCOUNT, user.Account },
{ ClaimConst.CLAINM_NAME, user.Name },
{ ClaimConst.CLAINM_SUPERADMIN, CLAINM_SUPERADMIN },
{ ClaimConst.GroupId, user.GroupId},
{ ClaimConst.OrgId,user.SysOrgId},
//{ ClaimConst.SupplyPlatformId,company?.SupplyPlatformId}
}, 1440);
// 设置Swagger自动登录
// _httpContextAccessor.SigninToSwagger(accessToken);
// 生成刷新Token令牌
var refreshToken = JWTEncryption.GenerateRefreshToken(accessToken, 1445);
_httpContextAccessor.HttpContext.Response.Headers["access-token"] = accessToken;
// 设置刷新Token令牌
_httpContextAccessor.HttpContext.Response.Headers["x-access-token"] = refreshToken;
LoginOutInfo loginOutInfo = new LoginOutInfo()
{
userID = user.Id,
token = accessToken
};
return loginOutInfo;
}
///
/// 获取当前登录用户信息
///
///
[HttpGet("/api/auth/getLoginUser")]
[AllowAnonymous]
public async Task GetLoginUserAsync()
{
string userid = App.User.FindFirst(ClaimConst.CLAINM_USERID)?.Value;
var user = await _db.Queryable().Where(u => u.Id == userid).FirstAsync();
if (user != null)
{
var reslut = user.Adapt();
return reslut;
}
else
{
throw Oops.Oh($"用户不存在");
}
}
///
/// 退出
///
///
[HttpGet("/api/auth/logout")]
public async Task LogoutAsync()
{
// _httpContextAccessor.SignoutToSwagger();
await Task.CompletedTask;
}
}
}