Ejemplo n.º 1
0
        /// <summary>
        /// 管理员登录。
        /// 1、登录失败,记录登录错误次数,记录登录日志。
        /// 2、登录成功,清空登录错误次数,记录登录日志。
        /// </summary>
        /// <param name="adminName"></param>
        /// <param name="adminPassword">明文密码</param>
        /// <param name="manageCode">管理认证码</param>
        /// <param name="isCheckManageCode">是否启用管理认证码检查</param>
        /// <returns></returns>
        public async Task <IdentityResult> Login(string adminName, string adminPassword, string manageCode = "", bool isCheckManageCode = true)
        {
            //检查管理认证码
            if (isCheckManageCode)
            {
                SiteOptionConfig siteOptionConfig = ConfigHelper.Get <SiteOptionConfig>();
                if (siteOptionConfig.EnableSiteManageCode && (manageCode.Trim() != siteOptionConfig.SiteManageCode))
                {
                    await _repository.CumulativeLoginErrTimes(adminName);

                    return(new IdentityResult("您输入的管理认证码不正确,请重新输入。"));
                }
            }

            //得到实体
            AdminEntity admin = await _repository.GetEntityAsync(adminName, adminPassword);

            if (admin == null || admin.AdminID <= 0)
            {
                await _repository.CumulativeLoginErrTimes(adminName);

                _LogRepository.SaveLog("管理员登录失败!用户名:" + adminName, "输入的用户名或密码不正确", adminName, LogCategory.LogOnFailure, LogPriority.Highest);
                return(new IdentityResult("您输入的用户名或密码不正确,请重新输入。"));
            }
            //检查是否锁定
            if (admin.IsLock)
            {
                _LogRepository.SaveLog("管理员登录失败!用户名:" + adminName, "账号已锁定", adminName, LogCategory.LogOnFailure, LogPriority.Highest);
                return(new IdentityResult("账号已锁定。"));
            }
            //检查密码的HASH值
            bool isHash = await _repository.AuthenticatePassHash(adminName);

            if (!isHash)
            {
                await _repository.CumulativeLoginErrTimes(adminName);

                _LogRepository.SaveLog("管理员登录失败!用户名:" + adminName, "登录失败,数据被非法修改,请检查数据的有效性!", adminName, LogCategory.LogOnFailure, LogPriority.Highest);
                return(new IdentityResult("数据被非法修改,请检查数据的有效性!"));
            }
            //重置登录错误次数、记录登录成功日志、创建返回类
            admin.LoginErrorTimes = 0;
            admin.LoginTimes     += 1;
            admin.LoginTime       = DateTime.Now;
            admin.LoginIP         = Utility.GetClientIP();
            admin.RndPassword     = DataSecurity.MakeRandomString(16);
            await _repository.UpdateAsync(admin);

            _LogRepository.SaveLog("管理员登录成功!用户名:" + adminName, "管理员登录成功", adminName, LogCategory.LogOnOk);
            return(new IdentityResult(CreateClaimsIdentity(admin)));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 使用sha1方式对字符串进行加密,主要用于对登录密码的再次加密,以防止破解。
        /// 1、在密码后加入SiteOption.SiteHashCode字符串。
        /// 2、使用 sha1 加密。
        /// </summary>
        /// <param name="adminPassword">管理员密码(已经被MD5加密)</param>
        /// <returns></returns>
        public async Task <string> GetAuthenticatePassHash(string adminPassword)
        {
            SiteOptionConfig siteOptionConfig = ConfigHelper.Get <SiteOptionConfig>();

            return(await Task.Run(() => Sha1.Encrypt(adminPassword + siteOptionConfig.SiteHashCode)));
        }