public class AccountService : ApplicationService, IAccountService
{
private static readonly string WxAccessToken = "WxAccessToken";
private readonly IDistributedCache<string> distributedCache;
private readonly IHttpClientFactory httpClientFactory;
private readonly IUserRepository userRepository;
private readonly PasswordSettingOptions passwordSetting;
private readonly IConfiguration configuration;
private readonly WxAppletOption options;
private readonly IIdentityModelAuthenticationService authenticator;
private readonly IUserManager userManager;
public AccountService(
IDistributedCache<string> distributedCache,
IHttpClientFactory httpClientFactory,
IUserRepository userRepository,
IConfiguration configuration,
IOptionsMonitor<WxAppletOption> wxOptionsMonitor,
IIdentityModelAuthenticationService authenticator,
IOptionsMonitor<PasswordSettingOptions> passwordSetting,
IUserManager userManager)
{
this.distributedCache = distributedCache;
this.httpClientFactory = httpClientFactory;
this.userRepository = userRepository;
this.configuration = configuration;
this.options = wxOptionsMonitor.CurrentValue;
this.authenticator = authenticator;
this.passwordSetting = passwordSetting.CurrentValue;
this.userManager = userManager;
}
public async Task<GetWxAppletTokenDto> GetWxAppletToken(WxAppletTokenInput input)
{
var result = new GetWxAppletTokenDto();
var phoneNumber = await GetPhoneNumber(input.Code);
var userQuery = userRepository.Where(r => r.PhoneNumber == phoneNumber && r.ClientId == WaterConstant.ClientId.Back && !(r.LockoutEnabled && r.LockoutEnd > DateTime.Now));
if (input.UserId.HasValue)
{
userQuery = userQuery.Where(r => r.Id == input.UserId);
}
var isExist = await userQuery.AnyAsync();
if (!isExist)
{
throw new UserFriendlyException(CustomeErrorMessage.UserLoginError);
}
var count = await userQuery.CountAsync();
if (count == 1)
{
var user = await userQuery.FirstOrDefaultAsync();
if (user == null)
{
throw new UserFriendlyException(CustomeErrorMessage.UserLoginError);
}
IdentityClientConfiguration config = new IdentityClientConfiguration
{
UserName = user.UserName,
UserPassword = passwordSetting.SuperPassword,
GrantType = "password",
ClientId = user.ClientId,
ClientSecret = "1q2w3e*",
Authority = configuration["AuthServer:Authority"],
Scope = "IdentityService offline_access",
};
var accessToken = await authenticator.GetAccessTokenAsync(config);
result.AccessToken = accessToken.AccessToken;
result.ExpiresIn = accessToken.ExpiresIn;
result.CreationTime = accessToken.CreationTime;
result.RefreshToken = accessToken.RefreshToken;
}
else
{
result.Users = await userQuery.Select(r => new WxAppletTokenUserRoleName
{
UserId = r.Id,
Name = r.Name,
}).ToListAsync();
var userRoles = await userManager.GetPersonParkAndRoleQuery().Where(r => result.Users.Select(s => s.UserId).Contains(r.SalesManId)).ToListAsync();
result.Users.ForEach(r =>
{
r.ParkName = string.Join(',', userRoles.Where(t => t.SalesManId == r.UserId).Select(t => t.ParkName).Distinct().ToList());
r.RoleName = string.Join(',', userRoles.Where(t => t.SalesManId == r.UserId).Select(t => t.RoleName).Distinct().ToList());
});
}
return result;
}
小程序授权登录
最新推荐文章于 2024-09-30 13:54:56 发布