Laravel 7新api/v2路由文件中auth:api中间件失效问题求助
问题原因及解决办法
核心原因:Apache服务器丢弃了Authorization请求头
在Apache 2.4+环境下,默认配置可能会过滤掉Authorization请求头(尤其是使用mod_php运行PHP时),这会导致Laravel无法获取到认证令牌,进而使auth:api中间件失效,$request->user()无法返回用户信息。
具体排查与修复步骤
1. 检查public目录下的.htaccess配置
确保项目public/.htaccess文件包含传递Authorization头的规则,重点确认以下代码段存在:
# Handle Authorization Header RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
如果缺失该规则,添加后重启Apache服务。
2. 启用Apache的mod_rewrite模块
执行命令检查并启用模块:
sudo a2enmod rewrite sudo systemctl restart apache2
3. 调整Apache站点配置的AllowOverride设置
打开站点配置文件(通常位于/etc/apache2/sites-available/your-site.conf),确保项目public目录对应的<Directory>块中AllowOverride设置为All:
<Directory /var/www/your-project/public> AllowOverride All Require all granted </Directory>
修改后保存配置并重启Apache。
4. 确认路由的auth:api中间件正确应用
在routes/api/v2/api.php中,确保需要认证的路由已添加auth:api中间件,示例:
Route::get('/user', function (Request $request) { return $request->user(); })->middleware('auth:api');
补充说明
旧路由正常是因为其请求头能被正确传递,而新路由的api/v2前缀可能触发了Apache的不同配置规则,导致头信息丢失。按上述步骤修复后,Authorization头会被正常传递到Laravel应用,auth:api中间件即可正常工作。
内容的提问来源于stack exchange,提问作者HasilT
相关产品推荐
相关产品推荐

