Laravel Jetstream访问API端点时自动重定向至仪表盘问题
解决Laravel 10 + Jetstream 4迁移后API端点重定向问题
1. 核对路由命名与导航链接一致性
执行命令查看完整路由列表:
php artisan route:list
找到assets相关的API路由,确认它的命名(比如api.assets.index),然后修改navigation-menu.blade.php中的链接,使用正确的路由名:
<x-nav-link :href="route('api.assets.index')" :active="request()->routeIs('api.assets.index')"> {{ __('Assets') }} </x-nav-link>
如果API路由未命名,给它添加命名:
// api.php Route::get('/assets', [AssetController::class, 'index']) ->middleware(config('jetstream.auth_session')) ->name('api.assets.index');
2. 修正API路由中间件配置
确保API路由加载了会话认证所需的中间件,可直接将需要会话认证的API路由加入包含web中间件的组(web中间件默认包含session、auth.session等):
// api.php Route::middleware(['api', 'web'])->group(function () { Route::get('/assets', [AssetController::class, 'index'])->name('api.assets.index'); });
或者单独指定Jetstream的会话认证中间件:
Route::get('/assets', [AssetController::class, 'index']) ->middleware(['api', config('jetstream.auth_session')]) ->name('api.assets.index');
3. 排查路由冲突
检查web.php中是否存在同名的/assets路由,若存在且无实际用途,直接删除;若需保留,确保其控制器逻辑无错误重定向,且未错误添加RedirectIfAuthenticated中间件。
4. 检查重定向中间件逻辑
打开app/Http/Middleware/RedirectIfAuthenticated.php,确认逻辑仅对登录、注册等访客页面生效,未被错误应用到assets路由:
public function handle(Request $request, Closure $next, ...$guards) { $guards = empty($guards) ? [null] : $guards; foreach ($guards as $guard) { if (Auth::guard($guard)->check()) { return redirect(RouteServiceProvider::HOME); } } return $next($request); }
确保assets路由未添加guest或RedirectIfAuthenticated中间件。
5. 清除缓存并验证
执行以下命令清除所有缓存:
php artisan route:clear php artisan cache:clear php artisan config:clear
随后使用浏览器硬刷新(Ctrl+Shift+R)清除本地缓存,重新测试访问。
6. 检查控制器逻辑
打开AssetController的index方法,确保无错误重定向代码,比如:
public function index() { // 正常返回视图或JSON数据 return view('assets.index'); // 若为纯API接口,返回JSON: // return response()->json(Asset::all()); }
内容的提问来源于stack exchange,提问作者ox15
相关产品推荐
相关产品推荐

