Laravel Sanctum | ReactJS | SPA 认证问题

3
我正在使用Laravel Sanctum进行SPA身份验证。我的SPA是React,并与Laravel在同一个存储库中。这意味着我正在使用Laravel React UI脚手架。
我的第一个问题是,在访问我的SPA应用程序的登录页面时,我看到XSRF-TOKENapp_session cookie,而没有发送请求到sanctum/csrf-cookie

enter image description here

问题:为什么会生成cookie而没有调用csrf-cookie端点?

是不是Laravel默认生成它?

其次,登录和csrf-cookie的调用都正常,但/user API失败了。

enter image description here

我的环境文件.env配置如下:

SESSION_DRIVER=cookie
SESSION_LIFETIME=120
# localhost
SANCTUM_STATEFUL_DOMAINS='app.vm.com'
SESSION_DOMAIN='vm.com'

sanctum.php具有以下配置:

return [

'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', 'localhost,127.0.0.1,127.0.0.1:8000,::1')),

'expiration' => null,

'middleware' => [
    'verify_csrf_token' => App\Http\Middleware\VerifyCsrfToken::class,
    'encrypt_cookies' => App\Http\Middleware\EncryptCookies::class,
],

'prefix' => 'api',
'guard' => 'api',
];

cors.php具有以下配置:

return [

'paths' => ['api/*'],

'allowed_methods' => ['*'],

'allowed_origins' => ['*'],

'allowed_origins_patterns' => [],

'allowed_headers' => ['*'],

'exposed_headers' => [],

'max_age' => 0,

'supports_credentials' => true,

];

kernel.php也需要进行更改:

'api' => [
    EnsureFrontendRequestsAreStateful::class,
    throttle:60,1',
    \Illuminate\Routing\Middleware\SubstituteBindings::class,
 ],

我的路由web.php看起来像这样:

$spa = function () {
    return view('app');
};
Route::get('/{view?}', $spa)->where('view', '(.*)')->name('catchall');

api.php 路由文件如下:

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

Route::post('/login', 'LoginController@login');
Route::post('/logout', 'LoginController@logout');

请协助解决 /user 终端点的 401 错误。我已经按照许多教程进行了操作,但没有成功。
1个回答

0

在编程中,添加正确的带有端口号的SANCTUM_STATEFUL_DOMAINS域名应该可以解决问题。

在我的情况下,我的Laravel实例正在127.0.0.1:8001上运行,将其添加到.env文件中解决了我的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接