public string login(string username, string password, string code, string uuid, RequestBasicInfo info)
        {
            string verifyKey = YouGeSystemConst.CAPTCHA_CODE_KEY + uuid;

            string captcha = YouGeRedisHelper.Get(verifyKey);

            YouGeRedisHelper.Del(verifyKey);
            if (captcha == null)
            {
                //启动线程 记录日志
                var ta = new Task(() =>

                                  sysLoginRepository.recordLogininfor(username, YouGeSystemConst.FAIL, "没有验证码", info)
                                  );
                ta.Start();

                throw new CaptchaExpireException();
            }

            if (!string.Equals(code, captcha, StringComparison.OrdinalIgnoreCase))
            {
                var tb = new Task(() =>
                                  sysLoginRepository.recordLogininfor(username, YouGeSystemConst.FAIL, "验证码已失效", info)
                                  );
                tb.Start();
                throw new CaptchaException();
            }
            try
            {
                LoginUser loginUser = this.loadUserByUsername(username, password);
                var       tf        = new Task(() =>
                                               sysLoginRepository.recordLogininfor(username, YouGeSystemConst.SUCCESS, "登录成功", info)
                                               );
                tf.Start();
                // 生成token
                return(tokenService.createToken(loginUser, info));
            }
            catch (Exception e)
            {
                if (e.Message.Contains("密码错误"))
                {
                    var tc = new Task(() =>
                                      sysLoginRepository.recordLogininfor(username, YouGeSystemConst.FAIL, "用户不存在/密码错误", info)
                                      );
                    tc.Start();


                    throw new UserPasswordNotMatchException();
                }
                else
                {
                    var td = new Task(() =>
                                      sysLoginRepository.recordLogininfor(username, YouGeSystemConst.FAIL, e.Message, info)
                                      );
                    td.Start();

                    throw new CustomException(e.Message);
                }
            }
        }
        /// <summary>
        ///
        /// </summary>
        public void clearCache()
        {
            string keys = YouGeSystemConst.SYS_CONFIG_KEY + "*";

            YouGeRedisHelper.Del(keys);
            // throw new NotImplementedException();
        }
        public AjaxReponseBase getCode()
        {
            // 生成随机字串
            string verifyCode = string.Empty;
            // 唯一标识
            string uuid      = Guid.NewGuid().ToString().Replace("-", "");
            string verifyKey = YouGeSystemConst.CAPTCHA_CODE_KEY + uuid;


            // 生成图片
            int          w = 111, h = 36;
            MemoryStream stream = new MemoryStream();

            stream = VerifyCodeUtils.outputImage(w, h, out verifyCode, 4);
            YouGeRedisHelper.Set(verifyKey, verifyCode, YouGeSystemConst.CAPTCHA_EXPIRATION * 60);
            try
            {
                AjaxReponseBase ajax = AjaxReponseBase.Success();
                ajax.Add("uuid", uuid);
                ajax.Add("verifyCode", verifyCode);
                byte[] A = stream.ToByteArray();
                stream.Close();
                ajax.Add("img", YouGeBase64.encode(A));
                return(ajax);
            }
            catch (Exception e)
            {
                Log4NetHelper.Error("获取验证码异常 " + e.StackTrace);
                return(AjaxReponseBase.Error(e.Message));
            }
            finally
            {
                stream.Close();
            }
        }
 public void delLoginUser(string token)
 {
     if (!string.IsNullOrEmpty(token))
     {
         string userKey = getTokenKey(token);
         YouGeRedisHelper.Del(userKey);
     }
 }
        /// <summary>
        ///
        /// </summary>
        /// <param name="config"></param>
        /// <returns></returns>
        public int insertConfig(SysConfig config)
        {
            int row = this.Add(config);

            if (row > 0)
            {
                YouGeRedisHelper.Set(config.ConfigKey, config.ConfigValue);
            }
            return(row);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="config"></param>
        /// <returns></returns>
        public int updateConfig(SysConfig config)
        {
            int row = this.Edit(config);

            if (row > 0)
            {
                YouGeRedisHelper.Set(config.ConfigKey, config.ConfigValue);
            }
            return(row);
        }
        public void refreshToken(LoginUser loginUser)
        {
            loginUser.loginTime = DateTimeExtensions.CurrentTimeMillis();
            int expireTime = 30; // TO DO 这个要写在appsettiong.json文件中

            loginUser.expireTime = loginUser.loginTime + expireTime * MILLIS_MINUTE;
            // 根据uuid将loginUser缓存
            string userKey = getTokenKey(loginUser.token);

            YouGeRedisHelper.Set(userKey, loginUser, expireTime * 60);
        }
        public LoginUser getLoginUser(HttpRequest request)
        {
            // 获取请求携带的令牌
            string token = getToken(request);

            if (!string.IsNullOrEmpty(token))
            {
                List <Claim> claims = parseToken(token);
                // 解析对应的权限以及用户信息\
                string uuid = claims.Where(U => U.Type == YouGeSystemConst.LOGIN_USER_KEY).FirstOrDefault().Value;
                // string uuid = (string)claims.get();
                string    userKey = getTokenKey(uuid);
                LoginUser user    = YouGeRedisHelper.Get <LoginUser>(userKey);
                return(user);
            }
            return(null);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="configIds"></param>
        /// <returns></returns>
        public int deleteConfigByIds(long[] configIds)
        {
            int row = 0, count = 0;

            string[] keys = new string[configIds.Length];
            for (int i = 0; i < configIds.Length; i++)
            {
                row     = this.Delete((int)configIds[i]);
                count   = count + row;
                keys[i] = configIds[i].ToString();
            }


            if (count > 0)
            {
                YouGeRedisHelper.Del(keys);
                //  List<String> keys = YouGeRedisHelper.get(YouGeSystemConst.SYS_CONFIG_KEY + "*");
                // redisCache.deleteObject(keys);
            }
            return(count);
        }
Beispiel #10
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>();
            services.AddControllers().AddNewtonsoftJson(options =>
            {
                //修改属性名称的序列化方式,首字母小写
                options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();

                //修改时间的序列化方式
                options.SerializerSettings.Converters.Add(new IsoDateTimeConverter()
                {
                    DateTimeFormat = "yyyy-MM-dd HH:mm:ss"
                });
                options.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore; //设置忽略值
            }
                                                        );
            services.BuildAutofacServiceProvider();
            #region swagger ui
            //使用自身的
            services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
            }).AddJwtBearer(options =>
            {
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuer           = false,
                    ValidateAudience         = false,
                    ValidateLifetime         = false,
                    ValidateIssuerSigningKey = true,
                    ValidIssuer      = "jonny",
                    ValidAudience    = "jonny",
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("secretsecretsecret"))
                };
            });

            //使用identityserver

            //services.AddAuthentication("Bearer")
            //   .AddJwtBearer("Bearer", options =>
            //   {
            //       options.Authority = "http://localhost:5000";
            //       options.RequireHttpsMetadata = false;
            //       options.Audience = "user_api";
            //   });


            services.AddSwaggerGen(options =>
            {
                var scheme = new OpenApiSecurityScheme()
                {
                    Scheme       = JwtBearerDefaults.AuthenticationScheme,
                    BearerFormat = "JWT",
                    In           = ParameterLocation.Header,
                    //头名称
                    Name = "Authorization", //这个不能动,一定要一幕一样
                    Type = SecuritySchemeType.ApiKey,

                    Description = "Bearer (Token) Bearer {token}注意有空格 "
                };
                options.AddSecurityDefinition(JwtBearerDefaults.AuthenticationScheme, scheme);
                options.AddSecurityRequirement(new OpenApiSecurityRequirement()
                {
                    {
                        new OpenApiSecurityScheme
                        {
                            Reference = new OpenApiReference
                            {
                                Type = ReferenceType.SecurityScheme,
                                Id   = "Bearer"
                            }
                        },
                        new string[] {}
                    }
                });
                options.SwaggerDoc("v1", new OpenApiInfo {
                    Title = "有个 Core", Version = "v1"
                });
                //xml 文件
                var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
                // xml
                var xmlPath = System.IO.Path.Combine(AppContext.BaseDirectory, xmlFile);
                options.IncludeXmlComments(xmlPath, true);
            });
            #endregion

            // eg 1.单个redis实现 普通模式
            //CSRedisClient csredis = new CSRedisClient("127.0.0.1:6379,password=,defaultDatabase=csredis,prefix=csredis-example");
            //eg 2.单个redis,使用appsettings.json中的配置项
            IConfigurationSection configurationSection = Configuration.GetSection("CsRedisConfig:DefaultConnectString");
            CSRedisClient         csredis = new CSRedisClient(configurationSection.Value);
            //初始化 RedisHelper
            YouGeRedisHelper.Initialization(csredis);
            //注册mvc分布式缓存
            services.AddSingleton <IDistributedCache>(new CSRedisCache(RedisHelper.Instance));
            services.Configure <YouGeDbContextOption>(options =>
            {
                options.TagName           = "db2";
                options.ConnectionString  = Configuration.GetConnectionString("YouGeDB");
                options.ModelAssemblyName = "YouGe.Core.DBEntitys";    //这里必须是数据库实体类所在的项目
                options.IsOutputSql       = false;
            }
                                                      );
            //services.AddDbContext<IYouGeDbContext, YouGeDbContext>(option => { },ServiceLifetime.Scoped ); //注入EF上下文
            services.AddDbContext <IYouGeDbContext, YouGeDbContext>(); //注入EF上下文
        }