* @Date: 2026-08-06 22:05:39 * @LastEditors: YwxApp * @LastEditTime: 2026-08-07 00:32:06 * @Description: * @FilePath: \ywxapp_dev\config\ywxapp.php * @CustomString: Copyright (c) 2026 YwxApp */ /* * @Author: YwxApp * @Date: 2026-04-29 02:32:33 * @LastEditors: YwxApp * @LastEditTime: 2026-07-28 02:41:55 * @Description: * @FilePath: \ywxapp_dev\config\ywxapp.php * @CustomString: Copyright (c) 2026 YwxApp */ // +---------------------------------------------------------------------- // | YwxApp [ WE CAN DO IT JUST THINK ] // +---------------------------------------------------------------------- // | Copyright (c) 2026-2036 http://ywxapp.cn All rights reserved. // +---------------------------------------------------------------------- // | Author: ywxapp // +---------------------------------------------------------------------- return [ 'superAdmin' => 1, //是否开启前台会员中心 'usercenter' => true, //会员注册验证码类型email/mobile/wechat/text/false 'user_register_captcha' => 'text', //登录验证码 'login_captcha' => true, //登录失败超过10次则1天后重试 'login_failure_retry' => true, // ---- 登录爆破防护(AdminAuth::login 消费;不依赖 RateLimit 中间件 ---- // 原因:config/ratelimit.php 的 RateLimit 中间件只在 app/api 注册, // 后台 /admin/login 走不到,必须有独立的计数兜底。 // 同一 IP + 同一账号在窗口内失败达上限 → 封禁 block 秒。设 0 表示关闭限流。 'login_fail_limit' => (int) env('LOGIN_FAIL_LIMIT', 10), 'login_fail_window' => (int) env('LOGIN_FAIL_WINDOW', 600), 'login_block_time' => (int) env('LOGIN_BLOCK_TIME', 900), //是否同一账号同一时间只能在一个地方登录 'login_unique' => false, //是否开启IP变动检测 'loginip_check' => true, //登录页默认背景图 'login_background' => '', //是否启用多级菜单导航 'multiplenav' => false, //是否开启多选项卡(仅在开启多级菜单时起作用) 'multipletab' => true, //后台皮肤,为空时表示使用skin-blue-light 'adminskin' => '', //自动检测更新 'checkupdate' => false, //API是否允许跨域 'api_cross' => false, //版本号 'version' => '1.1.1', //API接口地址(本地自测:指向本机;生产部署需改回 https://www.ywxapp.cn,并确保中心站已部署含 framework 路由的新版 market) 'api_url' => env('APP_API_URL', 'https://www.ywxapp.cn'), // 市场角色(控制 is_market_client()):center=本机即中心站 / client=本机即客户机 / auto=按 api_url+本机主机推断 // 显式声明优于 auto:避免 api_url 误指向别处时角色翻转。本地开发建议直接设 center。 'market_mode' => env('APP_MARKET_MODE', 'auto'), // 是否开启多语言 'lang_switch_on' => true, //是否允许未知来源的插件压缩包(本地离线安装需开启,配合 APP_DEBUG 跳过远程授权校验) //安全提示:该开关仅在 APP_DEBUG=true 时才会真正跳过远程授权校验;生产环境务必保持 //APP_DEBUG=false,并可通过环境变量 ADDON_UNKNOWN_SOURCES=false 显式关闭离线安装,杜绝任意离线包直装。 'unknownsources' => env('ADDON_UNKNOWN_SOURCES', false), //插件启用禁用时是否备份对应的全局文件 'backup_global_files' => true, //插件纯净模式,插件启用后是否删除插件目录的application、public和assets文件夹 'addon_pure_mode' => true, 'addon_license_check' => env('ADDON_LICENSE_CHECK', false), // 运行期授权校验开关(true 时声明 license=>true 的付费插件需存在有效授权才加载) // 下载签名密钥:用于 download 接口 generateSign 校验,防 license_key 泄漏后被冒用下载。 // 生产环境务必改为强随机值(建议写入 .env 的 ADDON_SECRET),并保持与 API 客户端一致。 // 生成强随机密钥示例: openssl rand -base64 64 或 bin2hex(random_bytes(32)) 'addon_secret' => env('ADDON_SECRET', ''), // 下载签名校验开关:true 时 download 接口要求请求携带合法 sign+ts(配合 generateSign)。 // 启用后 API 客户端需用 license_key 计算签名,否则下载将被拒绝。默认关闭以免破坏现有下载链路。 // 自托管市场(中心站 addon/market 插件,路由 /api/addon/*)已配套实现:客户端 AddonService::download() 在开启时自动签名; // 启用前请确保 api_url 指向本服务器(服务端/客户端共享同一 addon_secret)。 'addon_download_sign' => false, // 主框架发布包(整站包/补丁/安装包)强制验签开关。 // true:FrameworkService::apply() 解压前必须过 PackageVerifier 的 RSA 验签, // 未签名/签名不符/版本不一致一律拒绝安装(防升级通道被用作远程代码执行)。 // 仅「自建升级服务器 + 自己签名」的内网调试场景可关闭:FRAMEWORK_PACKAGE_VERIFY=false 'framework_package_verify' => env('FRAMEWORK_PACKAGE_VERIFY', true), // 发布包公钥路径(留空用 ywxapp/data/package_public.pem,或 PackageVerifier::BUILTIN_PUBLIC_KEY) 'package_public_key_path' => env('PACKAGE_PUBLIC_KEY_PATH', ''), // 应用市场(appmall)的运行期配置(开发者令牌、远程开关、SSL 校验、抽成比例等): // appmall 已由插件迁为普通应用(app/appmall),其配置统一放在根级 config/appmall.php // (全局加载,任意应用均可 config('appmall.*')),并由 .env 覆盖。 // 开发模式开关(抄 Discuz! 插件设计器):开启后后台「插件」出现「设计插件」入口, // 可可视化创建/编辑本地插件(生成骨架、增删配置项/菜单/事件/路由、生成页面模块),改动实时生效。 // 生产环境务必保持 false(与 APP_DEBUG 解耦,独立开关)。 // 历史上后台「发布到官方市场」误把 developer_token 关联到 DEVELOPER_TOKEN,导致用户照着错误提示配错键。 // 现统一为 APPMARKET_DEV_TOKEN(与 config/appmall.php 同源),错误提示也同步修正。 'developer_token' => env('APPMARKET_DEV_TOKEN', ''), 'addon_developer' => env('ADDON_DEVELOPER', false), // 钩点可视化标注(Discuz 式开发者模式):开启后页面上的每个 hook() 埋点用蓝色虚线框 + 「⟡ 钩子名」标签标出, // 未挂载插件的空埋点同样显示,便于对照「模板位置 ↔ 钩子名」。 // 后台「数据运维 → 模板钩子」可临时开关(cookie hook_dev,只在后台应用内生效,防泄漏给前台访客); // 本开关为全局模式,前台/会员中心也需要标注时才置 true(建议仅开发环境)。 'hook_developer' => env('HOOK_DEVELOPER', false), 'backend_login_url' => '/admin/login/index', // 后台登录页地址(app_map: admin => backend) 'member_login_url' => '/user/login/index', // 会员中心登录页地址(app_map: member => frontend) ];