React + Laravel 圣所
我遵循了 https://laravel.com/docs/10.x/sanctum#spa-authentication 指南,但在请求受保护端点时最终得到 401。
XSRF 和会话令牌已设置,一切看起来都不错,但随后我在“auth:sanctum”路由上得到 401。
在 react 请求中,'credentials: include' 也被设置。
我想不通。
.环境:
SESSION_DOMAIN=127.0.0.1
SANCTUM_STATEFUL_DOMAINS=http://127.0.0.1:5173
FRONTEND_URL=http://127.0.0.1:5173
SESSION_DRIVER=cookie
我无法到达的路线:
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
return $request->user();
});
cors.php:
...
'paths' => ['*'],
'allowed_methods' => ['*'],
'allowed_origins' => [env('FRONTEND_URL', 'http://localhost:3000')],
'allowed_origins_patterns' => [],
'allowed_headers' => ['*'],
'exposed_headers' => [],
'max_age' => 0,
'supports_credentials' => true,
...
听起来您已经使用 Laravel 和 React 正确设置了 Sanctum,但是在尝试访问受保护的端点时仍然出现 401 未经授权的错误。这里有几件事要检查:
确保您已运行 php artisan migrate 以在数据库中创建必要的 Sanctum 表。
检查您的 CSRF 和会话令牌是否随您的请求正确发送。在您的 React 代码中,确保您在请求中包含 XSRF-TOKEN 标头,并在请求中发送 XSRF-TOKEN cookie。您可以通过在浏览器的开发人员工具中检查您的网络请求来验证是否正在发送这些令牌。
检查您的 Sanctum 配置是否正确设置。确保您的 SANCTUM_STATEFUL_DOMAINS 环境变量设置正确,并且您的 config/cors.php 文件配置为允许来自前端 URL 的请求。
验证您的用户是否确实经过身份验证。您可以通过在受保护路由中添加一个 dd($request->user()) 语句来查看是否返回了用户。
如果您已检查所有这些内容但仍然遇到问题,请尝试简化您的设置以隔离问题。例如,尝试从你的路由中删除 auth:sanctum 中间件,看看你是否可以在没有身份验证的情况下访问它。如果可行,请重新添加中间件并检查身份验证过程的每个步骤,直到找到问题为止。