コード例 #1
0
        /// <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
        }
コード例 #2
0
        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();
        }
コード例 #3
0
        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
            });
        }