Esempio n. 1
0
        public bool OAuthAccess()
        {
            var app = OAuthAppCache.Get(this._appid);

            if (app == null)
            {
                Alert("无效的应用编号");
                return(false);
            }
            //Tauth_Code daCode = new Tauth_Code();
            var daCode = DaoFactory.Tauth_Code();

            if (!daCode.SelectByAppId_GrantCode(app.Id, this._auth_code))
            {
                Alert("无效的授权码");
                return(false);
            }
            if (daCode.Status == 1)
            {
                Alert("该授权码已被使用,不能重复使用");
                return(false);
            }
            if (daCode.Expire_Time < DateTime.Now)
            {
                Alert("授权码已过期");
                return(false);
            }
            daCode.Status = 1;
            if (!daCode.Update())
            {
                Alert("授权码验证失败");
                return(false);
            }
            var scope = ScopeCache.Get(daCode.Scope_Id);

            BeginTransaction();
            UserTokenProvider utp = new UserTokenProvider(app, daCode.User_Id, daCode, scope.Code);

            utp.ReferenceTransactionFrom(Transaction);
            if (!utp.GenerateUserToken())
            {
                Rollback();
                Alert(utp.PromptInfo);
                return(false);
            }
            this.OAuthUser = utp.OAuthUser;
            if (!UpdateTokenRights(utp.TokenId, utp.Refresh_Timeout, daCode.Right_Json))
            {
                Rollback();
                return(false);
            }
            Commit();
            return(true);
        }
Esempio n. 2
0
        public bool Login(int client_source, string client_system, string device_id, string ip_address, string session_id, string clientVersion, int appid)
        {
            var fac = UserModuleFactory.GetUserModuleInstance();

            if (fac == null)
            {
                Alert(ResultType.系统异常, "加载用户模块失败");
                return(false);
            }
            try
            {
                UserVoucherType uvt = xUtils.GetVoucherType(this._user_code);
                this.User = fac.GetUserByVoucher(this._user_code, uvt);
            }
            catch (ApplicationException ex)
            {
                Alert(ResultType.非法操作, "无效的登录账号");
                Log.Error($"无效的登录账号[{this._user_code}]", ex);
                return(false);
            }
            catch (Exception exp)
            {
                Log.Error("登录异常", exp);
                Alert(ResultType.系统异常, "系统异常");
                return(false);
            }
            if (this.User == null)
            {
                Alert(ResultType.无效数据类型, "用户未注册");
                return(false);
            }
            if (this.User.Status != UserStatus.已激活)
            {
                Alert(ResultType.非法操作, $"账户{this.User.Status.ToString()}");
                return(false);
            }
            var lockResult = this.User.IsLocked(Winner.User.Interface.Lock.LockRight.登录);

            if (lockResult.IsLocked)
            {
                Alert(ResultType.非法操作, lockResult.Reason);
                return(false);
            }
            if (loginType == LoginType.LOGIN_BY_PASSWORD || loginType == LoginType.密码登录)
            {
                if (!IgnorePassword && !this.User.CheckLoginPassword(_password))
                {
                    Alert(ResultType.非法操作, this.User.ErrorInfo.Message);
                    return(false);
                }
            }
            else if (loginType == LoginType.短信验证码登录)
            {
                SmsValidateProvider smsValid = new SmsValidateProvider(this.User.MobileNo, SmsValidateType.登录验证码);
                if (!smsValid.ValidateCode(_password))
                {
                    Alert(ResultType.非法操作, smsValid.PromptInfo);
                    return(false);
                }
            }
            else
            {
                Alert(ResultType.无效数据类型, "无效的登录方式");
                return(false);
            }
            SaveUserDevice(this.User.UserId, device_id, client_system, client_source);
            //this.Token = xUtils.EncryptAccessToken(this.User.UserId, this.User.UserCode, appid);

            UserTokenProvider utp = new UserTokenProvider(appid, this.User.UserId, null, device_id, this._scope);

            if (!utp.GenerateUserToken())
            {
                Alert(utp.PromptInfo);
                return(false);
            }
            this.OAuthUser = utp.OAuthUser;
            this.Token     = utp.OAuthUser.Token;


            //Tauth_Session daSession = new Tauth_Session
            var daSession = DaoFactory.Tauth_Session();

            daSession.Client_Source  = client_source;
            daSession.Client_System  = client_system;
            daSession.Device_Id      = device_id;
            daSession.Ip_Address     = ip_address;
            daSession.Session_Id     = session_id;
            daSession.Status         = 1;
            daSession.User_Id        = this.User.UserId;
            daSession.Token          = this.Token;
            daSession.Client_Version = clientVersion;

            if (!daSession.Insert())
            {
                Alert(ResultType.系统异常, "保存登录会话失败");
                return(false);
            }
            Logined();
            return(true);
        }