小程序授权登录

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值