Laravel Jetstream 在尝试访问 API 端点时重定向

问题描述 投票:0回答:1

当我尝试访问 Laravel API 中的端点时,Jetstream 重定向到

dashboard
页面。我已经登录,当我从仪表板转到端点时,它会返回到仪表板。我在没有 Jetstream 的情况下制作了应用程序,然后创建了一个新项目并将代码复制到其中(控制器、模型、策略等)。我使用的是 Laravel 10 和 Jetstream 4。这是我的 web.php:

Route::get('/', function () {
    return view('welcome');
});

Route::middleware([
    'auth:sanctum',
    config('jetstream.auth_session'),
    'verified',
])->group(function () {
    Route::get('/dashboard', function () {
        return view('dashboard');
    })->name('dashboard');
    
});

api.php(我正在尝试访问

assets
路线)

Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
    return $request->user();
});

Route::group(['namespace' => '\App\Http\Controllers\Api', 'middleware' => 'auth:sanctum', config('jetstream.auth_session'),
'verified',], function() {
    Route::apiResource('users', UserController::class)->names('users');
    Route::apiResource('assets', AssetController::class)->names('assets');
    Route::apiResource('events', EventController::class)->names('events');

    Route::post('assets/bulk', ['uses' => 'App\Http\Controllers\Api\AssetController@bulkStore']);
});

我添加了

config('jetstream.auth_session')
部分,因为它用在
web.php
中。好像没啥区别。

这是页面的一部分,其中包含我尝试单击的链接(

resources/views/navigation-menu.blade.php

                <!-- Navigation Links -->
                <div class="hidden space-x-8 sm:-my-px sm:ms-10 sm:flex">
                    <x-nav-link href="{{ route('dashboard') }}" :active="request()->routeIs('dashboard')">
                        {{ __('Dashboard') }}
                    </x-nav-link>
                </div>
                <div class="hidden space-x-8 sm:-my-px sm:ms-10 sm:flex">
                    <x-nav-link href="{{ route('assets') }}" :active="request()->routeIs('assets')">
                        {{ __('Assets') }}
                    </x-nav-link>
                </div>
            </div>

我不知道还有哪些其他文件与此问题相关。我对 Laravel 没有太多经验,这是我第一次使用 Jetstream。我读了一篇关于如何重定向到不同路线的文章,但我不想这样做。 如何让它在不重定向的情况下转到我的 API 端点?

我尝试单击

dashboard
路线导航菜单中的“资产”链接。我原以为它会显示一个空白页面,但它只是重定向回仪表板。我还尝试了
php artisan route:clear
并在 Chrome 中执行
Empty Cache and Hard Reload
,但我得到了相同的结果。我的开发者工具的网络选项卡如下所示: There's a 302 response on assets and login.The one on login comes from the assets endpoint. THere's a 200 on dashboard coming from login.

laravel redirect laravel-10 jetstream laravel-fortify
1个回答
0
投票

您的

api.php
中的中间件配置不正确。您添加了
config('jetstream.auth_session'), 'verified'
作为数组上传递到
Route::group()
的附加项目,但您需要将它们添加为中间件数组上设置的项目:

Route::group(['namespace' => '\App\Http\Controllers\Api', 'middleware' => ['auth:sanctum', config('jetstream.auth_session'), 'verified']], function() {
    //
}

由于您的 auth 中间件定义不正确,当您尝试访问

assets
路由时,它无法确定您已登录,因此会将您重定向到登录。但是,当您点击登录路线时,它可以确定您已经登录,因此会将您重定向到仪表板路线。

综上所述,我认为您可能试图在这里解决错误的问题。您的 api 路由就是这样的,即由 api 命中并通过 api 令牌(或某种其他类型的 api 身份验证方法)访问的路由。即使您确实更正了中间件定义,我也不确定这是否真的有效,因为 api 路由未设置为了解会话,因此身份验证会话中间件仍然无法授予对 api 路由的访问权限。

如果您需要将

assets
路由作为网站的一部分,则应在
web.php
路由文件中定义它。这将为您提供一个可通过 Web 访问的
assets
路线和一个可通过 api 访问的
assets
路线。理想情况下,这些路线将由它们自己的单独控制器处理。如果存在处理路由的共享逻辑,则应提取该共享逻辑并由每个单独的控制器调用。

© www.soinside.com 2019 - 2024. All rights reserved.