Beispiel #1
0
        private async Task <PortalTokenResp> LoginFinallyExecute(UserInfoBigMo user,
                                                                 PortalAuthorizeType authType, bool isFromThirdBind = false, SocialPlatform plat = SocialPlatform.None)
        {
            Resp <UserIdentity> identityRes;

            switch (authType)
            {
            case PortalAuthorizeType.Admin:     //  登录时默认只有admin,不会出现 superAdmin

                var adminRes = await AdminInfoRep.Instance.GetAdminByUId(user.id);

                if (!adminRes.IsSuccess())
                {
                    return new PortalTokenResp()
                           {
                               ret = adminRes.ret, msg = "管理员账号/密码错误!"
                           }
                }
                ;

                identityRes = InitialAdminIdentity(adminRes.data, plat);
                break;

            case PortalAuthorizeType.User:
                identityRes = InitialUserIdentity(user, plat);
                break;

            default:
                return(new PortalTokenResp(RespTypes.ParaError, "账号/密码错误!"));
            }

            if (!identityRes.IsSuccess())
            {
                return(new PortalTokenResp().WithResp(identityRes));
            }

            if (isFromThirdBind)
            {
                var bindRes = await BindTempOauthUserToUser(user.id);

                if (!bindRes.IsSuccess())
                {
                    return(new PortalTokenResp().WithResp(bindRes));
                }

                plat = bindRes.data;
            }

            PortalEvents.TriggerLoginEvent(identityRes.data, CoreAppContext.Identity);
            return(GeneratePortalToken(identityRes.data, plat));
        }
Beispiel #2
0
        private static async Task <Resp <UserIdentity> > GetAuthIdentityById(long userId,
                                                                             PortalAuthorizeType authType, SocialPlatform fromPlat)
        {
            Resp <UserIdentity> identityRes;

            switch (authType)
            {
            case PortalAuthorizeType.Admin:
            case PortalAuthorizeType.SuperAdmin:
                var adminRes = await AdminInfoRep.Instance.GetAdminByUId(userId);

                if (!adminRes.IsSuccess())
                {
                    return(new Resp <UserIdentity>().WithResp(RespTypes.UnLogin, "用户未登录!"));
                }

                identityRes = InitialAdminIdentity(adminRes.data, fromPlat);
                break;

            case PortalAuthorizeType.User:
                var userRes = await UserInfoRep.Instance.GetById(userId);

                if (!userRes.IsSuccess())
                {
                    return(new Resp <UserIdentity>().WithResp(RespTypes.UnLogin, "用户未登录!"));
                }

                identityRes = InitialUserIdentity(userRes.data, fromPlat);
                break;

            default:
                identityRes = new Resp <UserIdentity>().WithResp(RespTypes.UnLogin, "用户未登录!");
                break;
            }

            if (!string.IsNullOrEmpty(identityRes.data?.avatar))
            {
                identityRes.data.avatar = string.Concat(identityRes.data.avatar, ImageStyle.avatar_style);
            }
            return(identityRes);
        }
Beispiel #3
0
        private async Task <PortalTokenResp> RegFinallyExecute(UserInfoBigMo user, PortalAuthorizeType authType,
                                                               bool isFromBind = false, SocialPlatform plat = SocialPlatform.None)
        {
            var idRes = await UserInfoRep.Instance.Add(user);

            if (!idRes.IsSuccess())
            {
                return(new PortalTokenResp().WithResp(idRes));
            }

            if (isFromBind)
            {
                var bindRes = await BindTempOauthUserToUser(user.id);

                if (!bindRes.IsSuccess())
                {
                    return(new PortalTokenResp().WithResp(bindRes)); //bindRes;
                }
                plat = bindRes.data;
            }

            user.pass_word = null;
            var identity = new UserIdentity()
            {
                auth_type = authType,

                id     = user.id.ToString(),
                name   = user.nick_name,
                avatar = user.avatar
            };

            PortalEvents.TriggerRegisterEvent(identity, plat, CoreAppContext.Identity);
            return(GeneratePortalToken(identity, plat));

            ;
        }
Beispiel #4
0
        //  动态码验证登录
        private async Task <PortalTokenResp> CodeLogin(string name, string code, RegLoginType type,
                                                       PortalAuthorizeType authType, bool isFromThirdBind = false)
        {
            var codeRes = await CheckPasscode(name, code);

            if (!codeRes.IsSuccess())
            {
                return(new PortalTokenResp().WithResp(codeRes));
            }

            var userRes = await UserInfoRep.Instance.GetUserByLoginType(name, type);

            if (!userRes.IsSuccess())
            {
                return new PortalTokenResp()
                       {
                           ret = userRes.ret, msg = "账号或密码错误!"
                       }
            }
            ;

            // 执行登录
            return(await LoginFinallyExecute(userRes.data, authType, isFromThirdBind, SocialPlatform.None));
        }
        /// <summary>
        ///  根据第三方信息处理登录或注册
        ///     (如果未绑定过系统账号,根据配置处理是否默认注册绑定
        /// </summary>
        /// <param name="plat"></param>
        /// <param name="code"></param>
        /// <param name="state"></param>
        /// <param name="authType"></param>
        /// <returns></returns>
        private async Task <PortalTokenResp> OauthRegLogin(SocialPlatform plat, string code, string state, PortalAuthorizeType authType)
        {
            // 先获取第三方账号最新信息,更新至本地
            var oauthUserRes = await AddOrUpdateOauthUser(plat, code, state);

            if (!oauthUserRes.IsSuccess())
            {
                return(new PortalTokenResp().WithResp(oauthUserRes)); // oauthUserRes.ConvertToResultInherit<PortalTokenResp>();
            }
            // 【已绑定过的用户】   执行登录
            var oauthUser = oauthUserRes.data;

            if (oauthUser.owner_uid > 0)
            {
                //  尝试直接登录
                var userRes = await UserInfoRep.Instance.GetById(oauthUser.owner_uid);

                return(!userRes.IsSuccess()
                    ? new PortalTokenResp().WithResp(userRes)
                    : await LoginFinallyExecute(userRes.data, authType, false, plat));
            }

            //  管理员只能通过第三方绑定信息登录,如果没有,登录失败
            if (authType == PortalAuthorizeType.Admin)
            {
                return new PortalTokenResp()
                       {
                           ret = (int)RespTypes.ParaError, msg = "非管理员账号,登录失败!"
                       }
            }
            ;

            // 【已绑定过的用户】  根据系统配置,检查是否默认绑定注册
            var regConfig = GetOauthRegConfig();

            if (regConfig.OauthRegisterType == OauthRegisterType.JustRegister)
            {
                return(await OauthReg(oauthUser));
            }

            // 执行第三方临时授权,返回临时授权后通知前端,执行绑定相关操作
            oauthUser.status = regConfig.OauthRegisterType == OauthRegisterType.Bind
                ? UserStatus.WaitOauthBind
                : UserStatus.WaitOauthChooseBind;

            var ide = InitialOauthTempIdentity(oauthUser, plat);

            PortalEvents.TriggerOauthTempLoginEvent(ide.data, AppReqContext.Identity, plat);
            return(GeneratePortalToken(ide.data, plat));
        }
 /// <summary>
 /// 功能权限验证
 /// </summary>
 /// <param name="funcCode"></param>
 /// <param name="authType">  要求的授权类型,默认为管理员类型 </param>
 public UserFuncMetaAttribute(string funcCode, PortalAuthorizeType authType = PortalAuthorizeType.Admin)
 {
     Order     = -11;
     _funcCode = funcCode;
     AuthType  = authType;
 }
 /// <summary>
 /// 功能权限验证
 /// </summary>
 /// <param name="authType"> 要求的授权类型</param>
 public UserFuncMetaAttribute(PortalAuthorizeType authType)
     : this(string.Empty, authType)
 {
 }
Beispiel #8
0
        private async Task <PortalTokenResp> PwdLogin(string name, string password, RegLoginType type, PortalAuthorizeType authType, bool isFromThirdBind)
        {
            var userRes = await UserInfoRep.Instance.GetUserByLoginType(name, type);

            if (userRes.IsSuccess())
            {
                var user = userRes.data;
                if (Md5.EncryptHexString(password) == user.pass_word)
                {
                    return(await LoginFinallyExecute(user, authType, isFromThirdBind));
                }
            }
            return(new PortalTokenResp(RespTypes.ParaError, "账号密码不正确!"));
        }
Beispiel #9
0
 /// <summary>
 /// 功能权限要求
 /// </summary>
 /// <param name="authType"></param>
 /// <param name="funcCode"></param>
 /// <param name="sceneCode"></param>
 public AskUserFunc(PortalAuthorizeType authType, string funcCode, string sceneCode)
 {
     func_code  = funcCode;
     scene_code = sceneCode;
     auth_type  = authType;
 }