Exemple #1
0
        private static async Task <ResultMo <OauthUserMo> > AddOrUpdateOauthUser(SocialPaltforms plat, string code, string state)
        {
            var userWxRes = await SnsCommon.GetOauthUserByCode(plat, code, state);

            var userRes = await OauthUserRep.Instance.GetOauthUserByAppUserId(
                MemberShiper.AppAuthorize.TenantId,
                userWxRes.data.app_user_id, plat);

            if (userRes.IsSuccess())
            {
                var user = userRes.data;
                user.SetFromSocial(userWxRes.data);

                await OauthUserRep.Instance.UpdateUserWithToken(user);

                return(new ResultMo <OauthUserMo>(user));
            }

            if (!userRes.IsResultType(ResultTypes.ObjectNull))
            {
                return(userRes);
            }

            var newUser = userWxRes.data;
            var idRes   = await OauthUserRep.Instance.Add(newUser);

            if (!idRes.IsSuccess())
            {
                return(idRes.ConvertToResultOnly <OauthUserMo>());
            }

            newUser.id = idRes.id;
            return(new ResultMo <OauthUserMo>(newUser));
        }
Exemple #2
0
        /// <summary>
        /// 注册第三方信息到系统中
        /// </summary>
        /// <param name="plat"></param>
        /// <param name="code"></param>
        /// <param name="state"></param>
        /// <returns></returns>
        public async Task <UserTokenResp> SocialAuth(SocialPaltforms plat, string code, string state)
        {
            var oauthUserRes = await AddOrUpdateOauthUser(plat, code, state);

            if (!oauthUserRes.IsSuccess())
            {
                return(oauthUserRes.ConvertToResult <UserTokenResp>());
            }

            UserInfoBigMo user;
            var           type = MemberAuthorizeType.User;

            var oauthUser = oauthUserRes.data;

            if (oauthUser.user_id > 0) // 已经存在绑定,直接登录成功
            {
                var userRes =
                    await UserInfoRep.Instance.GetById(oauthUser.user_id);

                if (!userRes.IsSuccess())
                {
                    return(userRes.ConvertToResult <UserTokenResp>());
                }

                user = userRes.data;
                MemberEvents.TriggerUserLoginEvent(user, MemberShiper.AppAuthorize);
            }
            else
            {
                var regConfig = GetRegConfig(MemberShiper.AppAuthorize);
                user = oauthUser.ConvertToBigMo();
                if (regConfig.OauthRegisteType == OauthRegisteType.JustRegiste)
                {
                    // 授权后直接注册用户
                    var idRes = await UserInfoRep.Instance.Add(user);

                    if (!idRes.IsSuccess())
                    {
                        return(idRes.ConvertToResult <UserTokenResp>());
                    }

                    user.id = idRes.id;

#pragma warning disable 4014
                    OauthUserRep.Instance.UpdateUserIdByOauthId(oauthUser.id, user.id);
#pragma warning restore 4014
                    MemberEvents.TriggerUserLoginEvent(user, MemberShiper.AppAuthorize);
                }
                else
                {
                    // 授权后通知前端,执行绑定相关操作
                    user.id     = oauthUser.id;
                    user.status = regConfig.OauthRegisteType == OauthRegisteType.Bind
                        ? (int)MemberStatus.WaitOauthBind
                        : (int)MemberStatus.WaitOauthChooseBind;
                    type = MemberAuthorizeType.OauthUserTemp;
                }
            }
            return(GenerateUserToken(user, type));
        }
        public async Task <UserTokenResp> SocialAuth(SocialPaltforms plat, string code, string state)
        {
            if (string.IsNullOrEmpty(code))
            {
                return(new UserTokenResp(ResultTypes.ParaError, "code 不能为空!"));
            }

            return(await service.SocialAuth(plat, code, state));
        }
Exemple #4
0
        /// <summary>
        /// 获取处理Hander
        /// </summary>
        /// <param name="plat">平台类型</param>
        /// <returns></returns>
        internal static IOauthHander GetHandlerByPlatform(SocialPaltforms plat)
        {
            IOauthHander handler;

            switch (plat)
            {
            case SocialPaltforms.Wechat:
                handler = WxOauthHander.Instance;
                break;

            //  todo 添加其他平台
            default:
                handler = BaseOauthHander <NoneOauthHander> .Instance;
                break;
            }

            handler.SetCOntextConfig(MemberShiper.AppAuthorize);
            return(handler);
        }
Exemple #5
0
        /// <summary>
        ///  获取授权用户并更新信息
        /// </summary>
        /// <param name="plat"></param>
        /// <param name="code"></param>
        /// <param name="state"></param>
        /// <returns></returns>
        internal static async Task <ResultMo <OauthUserMo> > GetOauthUserByCode(SocialPaltforms plat, string code, string state)
        {
            var handler  = GetHandlerByPlatform(plat);
            var tokenRes = await handler.GetOauthTokenAsync(code, state);

            if (!tokenRes.IsSuccess())
            {
                return(tokenRes.ConvertToResultOnly <OauthUserMo>());
            }

            var userWxRes = await handler.GetOauthUserAsync(tokenRes.data.access_token, tokenRes.data.app_user_id);

            if (!userWxRes.IsSuccess())
            {
                return(tokenRes.ConvertToResultOnly <OauthUserMo>());
            }

            userWxRes.data.SetTokenInfo(tokenRes.data);
            return(userWxRes);
        }
Exemple #6
0
 public async Task <ResultMo <OauthUserMo> > GetOauthUserByAppUserId(long tenantId, string appUId, SocialPaltforms plat)
 {
     return(await Get(u => u.app_user_id == appUId &&
                      u.tenant_id == tenantId &&
                      u.platform == plat));
 }
Exemple #7
0
 public ResultMo <string> GetOauthUrl(SocialPaltforms plat, string redirectUrl, string state, AuthClientType type)
 {
     return(service.GetOauthUrl(plat, redirectUrl, state, type));
 }
Exemple #8
0
        /// <summary>
        /// 获取授权地址
        /// </summary>
        /// <param name="plat">平台</param>
        /// <param name="redirectUrl">重定向回跳地址</param>
        /// <param name="state">返回参数,自行编码</param>
        /// <param name="type">授权类型</param>
        /// <returns></returns>

        public ResultMo <string> GetOauthUrl(SocialPaltforms plat, string redirectUrl, string state, AuthClientType type)
        {
            var handler = SnsCommon.GetHandlerByPlatform(plat);

            return(handler.GetOauthUrl(redirectUrl, state, type));
        }