예제 #1
0
        private async Task <PortalTokenResp> OauthReg(OauthUserMo oauthUser)
        {
            var user = GetRegisterUserInfo(oauthUser.nick_name, string.Empty, RegLoginType.ThirdName);

            user.avatar = oauthUser.head_img;

            var ptRes = await RegFinallyExecute(user, PortalAuthorizeType.User, false, oauthUser.social_plat);

            if (ptRes.IsSuccess())
            {
                await OauthUserRep.Instance.BindUserIdByOauthId(oauthUser.id, ptRes.data.id.ToInt64());
            }
            return(ptRes);
        }
예제 #2
0
 public async Task <ResultMo> UpdateUserWithToken(OauthUserMo user)
 {
     return(await Update(user,
                         u => new
     {
         u.app_union_id,
         u.head_img,
         u.nick_name,
         u.sex,
         u.access_token,
         u.expire_date,
         u.refresh_token
     },
                         w => w.id == user.id));
 }
예제 #3
0
        /// <summary>
        ///   添加或更新第三方授权用户信息
        /// </summary>
        /// <param name="plat"></param>
        /// <param name="code"></param>
        /// <param name="state"></param>
        /// <returns></returns>
        private static async Task <Resp <OauthUserMo> > AddOrUpdateOauthUser(SocialPlatform plat, string code,
                                                                             string state)
        {
            var userWxRes = await GetOauthUserByCode(plat, code, state);

            if (!userWxRes.IsSuccess())
            {
                return(new Resp <OauthUserMo>().WithResp(userWxRes));
            }

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

            if (userRes.IsSuccess())
            {
                //  如果存在,更新已有信息
                var user = userRes.data;

                user.SetInfoFromSocial(userWxRes.data);
                user.social_plat = plat;
                user.status      = UserStatus.Normal;

                await OauthUserRep.Instance.UpdateUserWithToken(user);

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

            //  其他错误,直接返回
            if (!userRes.IsRespType(RespTypes.ObjectNull))
            {
                return(userRes);
            }

            // 如果是新授权用户,添加新的信息
            var newUser = new OauthUserMo();

            newUser.SetInfoFromSocial(userWxRes.data);

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

            if (!idRes.IsSuccess())
            {
                return(new Resp <OauthUserMo>().WithResp(idRes.ret, "添加授权用户信息失败!")); // idRes.ConvertToResult<OauthUserMo>();
            }
            newUser.id = idRes.data;
            return(new Resp <OauthUserMo>(newUser));
        }
예제 #4
0
        /// <summary>
        ///  通过从社交平台拿回来信息重新赋值
        /// </summary>
        /// <param name="target"></param>
        /// <param name="source"></param>
        public static void SetInfoFromSocial(this OauthUserMo target, OauthUser source)
        {
            var appInfo = AppReqContext.Identity;

            target.access_token  = source.access_token;
            target.expire_date   = source.expire_date;
            target.refresh_token = source.refresh_token;
            target.social_plat   = source.social_plat.ToSocialPlat();

            target.head_img     = source.head_img;
            target.app_union_id = source.app_union_id;
            target.nick_name    = source.nick_name;
            target.sex          = source.sex.ToSexType();

            target.app_user_id = source.app_user_id;
            target.add_time    = DateTime.Now.ToUtcSeconds();
        }
예제 #5
0
        /// <summary>
        /// 转化到授权实体
        /// </summary>
        /// <param name="wxMo"></param>
        /// <returns></returns>
        public static ResultMo <OauthUserMo> ConvertToComMo(this WxGetOauthUserResp wxMo)
        {
            if (!wxMo.IsSuccess())
            {
                return(wxMo.ConvertToResultOnly <OauthUserMo>());
            }

            //var appInfo = MemberShiper.AppAuthorize;
            var comMo = new OauthUserMo
            {
                app_user_id  = wxMo.openid,
                app_union_id = wxMo.unionid,
                sex          = (Sex)wxMo.sex,
                nick_name    = wxMo.nickname,
                platform     = SocialPaltforms.Wechat,

                head_img = wxMo.headimgurl
            };

            return(new ResultMo <OauthUserMo>(comMo));
        }
예제 #6
0
        private static Resp <UserIdentity> InitialOauthTempIdentity(OauthUserMo oauthUser, SocialPlatform fromPlat)
        {
            var checkRes = CheckIdentityStatus(oauthUser.status);

            if (!checkRes.IsSuccess())
            {
                return(new Resp <UserIdentity>().WithResp(checkRes));
            }

            // 当前是临时第三方信息,【Id】是第三方授权表的oauthId
            //  此场景是给用户授权后选择是否绑定已有账户页面使用
            var identity = new UserIdentity
            {
                id     = oauthUser.id.ToString(),
                name   = oauthUser.nick_name,
                avatar = oauthUser.head_img,
                //from_plat = (int) fromPlat,

                auth_type = PortalAuthorizeType.SocialAppUser,
            };

            return(new Resp <UserIdentity>(identity));
        }