Docker环境下Laravel Sanctum+Oracle11g Bearer Token返回401问题排查
1. 前端请求头验证
- 确认请求是否携带正确的
Authorization: Bearer {token}头,注意Bearer后必须有空格,token值需与登录接口返回的一致 - 检查是否包含
X-Requested-With: XMLHttpRequest头,Sanctum依赖该头识别合法API请求 - 验证Angular拦截器是否正确将token注入所有受保护接口的请求头中,可通过浏览器开发者工具的Network面板查看请求头详情
2. Sanctum核心配置检查
- 核对
.env中的SANCTUM_STATEFUL_DOMAINS,需设置为前端域名(如frontend.yourdomain.com),多域名用逗号分隔,确保包含前端的完整域名(含端口,若有) - 检查
SESSION_DOMAIN配置,需与前端域名匹配,主域名场景可设为.yourdomain.com(注意前缀的点),避免session cookie无法跨域传递 - 确认
config/sanctum.php中的stateful项是否正确读取SANCTUM_STATEFUL_DOMAINS的值,未硬编码错误域名
3. Docker内Apache配置排查
- 检查Dockerfile是否启用了
mod_rewrite模块,需添加命令:RUN a2enmod rewrite,Laravel路由依赖该模块 - 确认Apache虚拟主机配置中,Laravel项目根目录的
<Directory>块设置了AllowOverride All,否则.htaccess中的路由规则无法生效,导致Sanctum路由处理异常 - 若服务器存在反向代理(如Nginx转发到Docker Apache),需确保代理配置传递了
X-Forwarded-Proto和X-Forwarded-For头,Laravel需要通过这些头识别真实请求协议(HTTP/HTTPS),否则session和Sanctum cookie会因协议不匹配失效
4. PHP环境差异验证
- 检查Docker内PHP是否安装了Sanctum必需的扩展:
mbstring、openssl、json,可通过php -m命令查看 - 查看Laravel日志(
storage/logs/laravel.log),确认用户查询、token验证过程中是否有Oracle数据库相关错误(oci8版本差异可能导致SQL语法兼容问题) - 检查PHP的
session.cookie_secure配置,生产环境若使用HTTPS,需将其设为On,确保session cookie仅通过安全连接传递
5. 日志定位具体原因
- 查看Laravel错误日志,找到401请求对应的日志条目,明确是token无效、请求头未识别还是session异常导致的认证失败
- 查看Apache访问日志(通常在
/var/log/apache2/access.log)和错误日志(/var/log/apache2/error.log),确认请求是否正确到达Laravel,有无重定向、404等前置异常
内容的提问来源于stack exchange,提问作者Pablo Diaz
相关产品推荐
相关产品推荐

