Laravel 多用户 JWT 认证需通过 .env 规范配置 JWT_SECRET、多数据库连接、模型路径及环境参数,确保签名安全、模型分离与环境隔离,严禁硬编码密钥或开启调试。

在 Laravel 中实现 JWT 多用户认证(比如区分普通用户、管理员、商家等不同模型),.env 文件本身不直接参与“多用户”逻辑判断,但它必须正确配置支撑认证体系的核心密钥和基础环境参数。关键不是往 .env 里写“哪个用户类型走哪套认证”,而是确保 JWT 签名安全、数据库连接可靠、环境隔离清晰——这些都依赖 .env 的规范配置。
JWT 核心密钥必须由 .env 管理
JWT 认证依赖对称签名(默认 HS256),其安全性完全取决于 JWT_SECRET。这个值绝不能硬编码在代码中,必须由 .env 提供:
- 运行
php artisan jwt:secret自动生成并写入JWT_SECRET=xxxxx...到 .env - 该密钥一旦生成,生产环境严禁修改——否则所有已签发 Token 立即失效
- 不同环境(local / production)应使用不同 JWT_SECRET,通过 CI/CD 或部署脚本注入,而非复用同一份 .env
多用户认证依赖的数据库与模型变量需明确分离
多用户意味着多个认证模型(如 User、Admin、Merchant),它们通常对应不同数据表和连接配置。.env 中应清晰区分:
-
DB_CONNECTION=pgsql(主应用数据库) -
ADMIN_DB_HOST=10.0.2.10、ADMIN_DB_DATABASE=admin_center(管理员专用库,可选) -
APP_USER_MODEL=App\Models\User、APP_ADMIN_MODEL=App\Models\Admin(自定义变量,供 config/auth.php 动态读取) - 避免把密码、密钥等敏感字段明文写死;数据库账号用最小权限原则,例如
DB_USERNAME=app_rw而非root
环境标识与调试开关必须严格管控
多用户接口常暴露更多端点,调试开启时极易泄露用户身份或 Token 结构:
-
APP_ENV=production—— 生产环境必须设为production,禁止local或dev -
APP_DEBUG=false—— 生产环境务必关闭,否则异常堆栈可能泄漏数据库结构、Token 解析逻辑甚至 .env 变量 -
LOG_LEVEL=error—— 避免将用户凭证、Token 内容打到日志;JWT 相关敏感字段(如sub、email)不应出现在日志中
推荐的 .env 变量组织方式(按功能分组)
提升可维护性,便于团队协作和 CI/CD 替换:
-
应用基础:
APP_NAME=MyApp、APP_URL=https://api.example.com -
JWT 专项:
JWT_SECRET=...、JWT_TTL=60(单位分钟)、JWT_REFRESH_TTL=20160(14天) -
多模型路由前缀:
API_USER_PREFIX=api、API_ADMIN_PREFIX=admin-api(供路由文件动态拼接) -
数据库隔离:
DB_CONNECTION=sqlite(本地)、ADMIN_DB_CONNECTION=mysql(管理后台专用) -
第三方服务:
STRIPE_KEY=pk_test_...、ALIYUN_OSS_ACCESS_KEY=...(全部大写+下划线,不加引号)


















