/// <summary> /// 绑定第三方并且授权 /// </summary> /// <param name="openId"></param> /// <param name="unionId"></param> /// <param name="platform"></param> /// <param name="output"></param> /// <param name="user"></param> /// <param name="unitOfWork"></param> /// <returns></returns> private async Task BindAndTokenAuth(string openId, string unionId, OpenIdPlatforms?platform, AppRegisterOrLoginOutput output, User user, IUnitOfWorkCompleteHandle unitOfWork) { #region 关联第三方OpenId if (!openId.IsNullOrEmpty() || !unionId.IsNullOrEmpty()) { var appTokenAuthInput = new AppTokenAuthInput { OpenIdOrUnionId = unionId ?? openId }; switch (platform) { case OpenIdPlatforms.WeChat: appTokenAuthInput.From = openId.IsNullOrWhiteSpace() ? AppTokenAuthInput.FromEnum.WeChatUnionId : AppTokenAuthInput.FromEnum.WeChat; break; case OpenIdPlatforms.WechatMiniProgram: appTokenAuthInput.From = AppTokenAuthInput.FromEnum.WeChatMiniProgram; break; default: break; } if (platform != null && !_appUserOpenIdResposotory.GetAll().Any(p => (p.OpenId == openId || p.UnionId == unionId) && p.From == platform && p.UserId == user.Id && p.TenantId == AbpSession.TenantId)) { var appUserOpenId = new AppUserOpenId { OpenId = openId, UnionId = unionId, From = platform.Value, UserId = user.Id, CreationTime = Clock.Now, TenantId = AbpSession.TenantId }; _appUserOpenIdResposotory.Insert(appUserOpenId); } } //获取授权信息 var result = await CreateToken(user); output.AccessToken = result.AccessToken; output.ExpireInSeconds = result.ExpireInSeconds; output.UserId = result.UserId; output.Phone = user.PhoneNumber; await unitOfWork.CompleteAsync(); #endregion }
public async Task AppTokenAuth_Test(string openIdOrUnionId, Magicodes.App.Application.Users.Dto.AppTokenAuthInput.FromEnum from) { var input = new AppTokenAuthInput() { OpenIdOrUnionId = openIdOrUnionId, From = from, }; var output = await _usersAppService.AppTokenAuth(input); output.ShouldNotBeNull(); }
public async Task <AppTokenAuthOutput> AppTokenAuth(AppTokenAuthInput input) { AppUserOpenId userOpenIdInfo = null; var openIdPlatform = OpenIdPlatforms.WeChat; var isUnionId = false; switch (input.From) { case AppTokenAuthInput.FromEnum.WeChatMiniProgram: { userOpenIdInfo = _appUserOpenIdResposotory.GetAllIncluding(p => p.User).FirstOrDefault(p => p.OpenId == input.OpenIdOrUnionId && p.From == OpenIdPlatforms.WechatMiniProgram); openIdPlatform = OpenIdPlatforms.WechatMiniProgram; } break; case AppTokenAuthInput.FromEnum.WeChat: { userOpenIdInfo = _appUserOpenIdResposotory.GetAllIncluding(p => p.User).FirstOrDefault(p => p.OpenId == input.OpenIdOrUnionId && p.From == OpenIdPlatforms.WeChat); openIdPlatform = OpenIdPlatforms.WeChat; } break; case AppTokenAuthInput.FromEnum.WeChatUnionId: { userOpenIdInfo = _appUserOpenIdResposotory.GetAllIncluding(p => p.User).FirstOrDefault(p => p.UnionId == input.OpenIdOrUnionId && p.From == OpenIdPlatforms.WeChat); isUnionId = true; openIdPlatform = OpenIdPlatforms.WeChat; } break; default: break; } if (userOpenIdInfo != null) { return(await CreateToken(userOpenIdInfo.User)); } var registerResult = await RegisterOrLogin(openId : isUnionId?null : input.OpenIdOrUnionId, unionId : isUnionId?input.OpenIdOrUnionId : null, platform : openIdPlatform); return(new AppTokenAuthOutput { AccessToken = registerResult.AccessToken, ExpireInSeconds = registerResult.ExpireInSeconds, Phone = registerResult.Phone, UserId = registerResult.UserId }); }