Пример #1
0
        /// <summary>
        /// 登陆
        /// </summary>
        /// <param name="parameter"></param>
        /// <returns></returns>
        public static UserState CreateState(AuthParameter parameter)
        {
            #region 检查参数
            if (parameter == null ||
                string.IsNullOrWhiteSpace(parameter.Type) ||
                string.IsNullOrWhiteSpace(parameter.Account))
            {
                return(null);
            }
            #endregion

            #region 验证身份
            if (parameter.Type == AuthType.PASSWORD &&
                !string.IsNullOrWhiteSpace(parameter.Password))
            {
                //通过密码验证
                bool validateResult = passport.Validate(parameter.Account, parameter.Password);
                if (!validateResult)
                {
                    return(null);
                }
            }
            else if (parameter.Type == AuthType.CLIENT &&
                     !string.IsNullOrWhiteSpace(parameter.AppKey) &&
                     !string.IsNullOrWhiteSpace(parameter.AppIp))
            {
                //通过信任的 App 验证
                App app = App.GetApp(parameter.AppKey);
                if (app == null ||
                    app.Secret != parameter.AppSecret)
                {//如果 app 不存在或 secret 错误,则返回 null ,验证失败
                    return(null);
                }
                else
                {
                    app.WhiteList = app.WhiteList ?? "";
                    var whiteList = app.WhiteList.Split(',')
                                    .Select(ip => (ip ?? "").Trim())
                                    .ToList();
                    whiteList.AddRange(new List <string> {
                        "localhost", "127.0.0.1", "::1"
                    });
                    var appIp = (parameter.AppIp ?? "").Trim();
                    if (!whiteList.Exists(ip => !string.IsNullOrWhiteSpace(ip) &&
                                          !string.IsNullOrWhiteSpace(appIp) &&
                                          ip == appIp))
                    {
                        return(null);
                    }
                }
            }
            else
            {
                return(null);
            }
            #endregion

            #region 检查用户状态
            var existUser = User.GetUser(parameter.Account);
            if (existUser == null || !existUser.IsActive)
            {
                return(null);
            }
            #endregion

            parameter.Device   = parameter.Device ?? "";
            parameter.DeviceId = parameter.DeviceId ?? "";
            parameter.Ip       = parameter.Ip ?? "";

            //检查在同一 DeviceId 下是否已存在状态
            UserState existUserState = UserState.GetState(parameter.Account, parameter.DeviceId);
            if (existUserState != null)
            {
                //利用当前类中 GetState 方法中写好的更新最后活动时间
                return(GetState(existUserState.Token));
            }

            //创建新用户会话状态开始
            //生成Token
            string    srcToken     = StringFactory.HashBySolt(StringFactory.NewGuid());
            UserState newUserState = new UserState();
            newUserState.Account    = parameter.Account;
            newUserState.LastActive = DateTime.Now;
            //--存储MD5后的Token,有数据库权限的人也不应该有查看别人会话密钥的权力
            newUserState.Token    = srcToken; //Encrypt.EncodeBySolt(srcToken);
            newUserState.Device   = parameter.Device;
            newUserState.DeviceId = parameter.DeviceId ?? parameter.Ip;
            newUserState.Ip       = parameter.Ip;
            newUserState.Save();
            //创建用户会话状态结束
            //向上层提供原Token
            newUserState.Token = srcToken;
            //
            return(newUserState);
        }
Пример #2
0
        /// <summary>
        /// 登陆
        /// </summary>
        /// <param name="parameter"></param>
        /// <returns></returns>
        public static UserState CreateState(AuthParameter parameter)
        {
            #region 检查参数
            if (parameter == null
                || string.IsNullOrWhiteSpace(parameter.Type)
                || string.IsNullOrWhiteSpace(parameter.Account))
            {
                return null;
            }
            #endregion

            #region 验证身份
            if (parameter.Type == AuthType.PASSWORD
                && !string.IsNullOrWhiteSpace(parameter.Password))
            {
                //通过密码验证
                bool validateResult = passport.Validate(parameter.Account, parameter.Password);
                if (!validateResult) return null;
            }
            else if (parameter.Type == AuthType.CLIENT
                && !string.IsNullOrWhiteSpace(parameter.AppKey)
                && !string.IsNullOrWhiteSpace(parameter.AppIp))
            {
                //通过信任的 App 验证
                App app = App.GetApp(parameter.AppKey);
                if (app == null
                    || app.Secret != parameter.AppSecret)
                {//如果 app 不存在或 secret 错误,则返回 null ,验证失败
                    return null;
                }
                else
                {
                    app.WhiteList = app.WhiteList ?? "";
                    var whiteList = app.WhiteList.Split(',')
                        .Select(ip => (ip ?? "").Trim())
                        .ToList();
                    whiteList.AddRange(new List<string> {
                            "localhost","127.0.0.1","::1"
                        });
                    var appIp = (parameter.AppIp ?? "").Trim();
                    if (!whiteList.Exists(ip => !string.IsNullOrWhiteSpace(ip)
                        && !string.IsNullOrWhiteSpace(appIp)
                        && ip == appIp))
                    {
                        return null;
                    }
                }
            }
            else
            {
                return null;
            }
            #endregion

            #region 检查用户状态
            var existUser = User.GetUser(parameter.Account);
            if (existUser == null || !existUser.IsActive)
            {
                return null;
            }
            #endregion

            parameter.Device = parameter.Device ?? "";
            parameter.DeviceId = parameter.DeviceId ?? "";
            parameter.Ip = parameter.Ip ?? "";

            //检查在同一 DeviceId 下是否已存在状态
            UserState existUserState = UserState.GetState(parameter.Account, parameter.DeviceId);
            if (existUserState != null)
            {
                //利用当前类中 GetState 方法中写好的更新最后活动时间
                return GetState(existUserState.Token);
            }

            //创建新用户会话状态开始
            //生成Token
            string srcToken = StringFactory.HashBySolt(StringFactory.NewGuid());
            UserState newUserState = new UserState();
            newUserState.Account = parameter.Account;
            newUserState.LastActive = DateTime.Now;
            //--存储MD5后的Token,有数据库权限的人也不应该有查看别人会话密钥的权力
            newUserState.Token = srcToken; //Encrypt.EncodeBySolt(srcToken);
            newUserState.Device = parameter.Device;
            newUserState.DeviceId = parameter.DeviceId ?? parameter.Ip;
            newUserState.Ip = parameter.Ip;
            newUserState.Save();
            //创建用户会话状态结束
            //向上层提供原Token
            newUserState.Token = srcToken;
            //
            return newUserState;
        }
Пример #3
0
 public void Login()
 {
     AuthParameter stateParamters = new AuthParameter();
     //loginParamters.Account=
 }
Пример #4
0
 private void LoginByParameter(AuthParameter parameter)
 {
     var userState = Business.User.CreateState(parameter);
     if (userState != null && !string.IsNullOrWhiteSpace(userState.Token))
     {
         string url = this.RedirectUrl + (this.RedirectUrl.Contains("?") ? "&" : "?") + "token=" + userState.Token;
         url += "&slot=" + this.Slot;
         this.PageEngine.GotoUrl(url);
     }
     else
     {
         this.PageEngine.ShowMessageBox("账号或密码错误,也可能账号已被禁用。");
     }
 }