小程序授权登录

 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: 对于springboot小程序授权登录,我可以为您提供一些指导意见。首先,您可以使用Spring Boot的OAuth2框架来实现小程序授权登录。其次,您还可以通过使用微信的SDK来实现小程序授权登录的功能。 ### 回答2: Springboot小程序授权登录是指在使用Springboot框架开发小程序时,实现用户登录授权的功能。 首先,我们需要在小程序端使用微信提供的API,获取用户的OpenID和SessionKey。通过Springboot的HTTP请求工具,发送请求到微信API接口,获取到用户的OpenID和SessionKey。 然后,我们可以根据获取到的OpenID和SessionKey,在后端的控制器中进行用户的登录授权逻辑。可以自定义一个用户实体类存储用户的信息,比如OpenID、SessionKey等。 接下来,我们可以使用Springboot提供的数据库操作工具,比如MyBatis或者Hibernate等,将用户信息存储到数据库中,或者更新用户的登录状态。 在前端页面中,我们可以根据用户的登录状态,判断用户是否已经登录成功。可以使用Springboot提供的Session管理工具,将用户的登录状态存储在Session中,在每次请求时判断用户的登录状态,进行相应的处理。 除了基本的授权登录功能,我们还可以结合Spring Security等安全框架,增加用户权限的管理。可以在数据库中存储用户的角色和权限信息,并在后端进行相应的授权校验,保证用户只能访问其具备权限的功能。 总的来说,Springboot小程序授权登录是通过调用微信API获取用户的OpenID和SessionKey,并结合Springboot框架实现用户登录授权功能的一种实践。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值