Pat*_*emi 5 laravel reactjs laravel-sanctum
我有一个 Laravel 后端和 React 前端,我使用 sainttum 进行 SPA 身份验证,并使用 Axios 来发出请求。我使用 localhost ,后端位于 http://localhost:8000 ,前端位于 http://localhost:3000 。
这是我的前端代码:
const apiClient = axios.create({
baseURL: `http://localhost:8000`,
withCredentials: true,
});
let config = {
headers: {
'Content-Type': 'application/json'
},
}
export async function login(credentials: LoginCredentials) {
return apiClient.get('sanctum/csrf-cookie', config).then(response => {
apiClient.post('/api/v1/login', JSON.stringify(credentials));
});
}
Run Code Online (Sandbox Code Playgroud)
我的 api 中间件类看起来像这样
'api' => [
\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Session\Middleware\StartSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
'throttle:api',
],
Run Code Online (Sandbox Code Playgroud)
这些是我的圣所配置;
'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf(
'%s%s',
'localhost,localhost:3000,localhost:3000/api/v1/login,127.0.0.1,127.0.0.1:8000,::1',
env('APP_URL') ? ','.parse_url(env('APP_URL'), PHP_URL_HOST) : ''
))),
SESSION_DOMAIN=http://localhost:3000
Run Code Online (Sandbox Code Playgroud)
最后是我的 cors 中间件
'paths' => ['api/*', 'sanctum/csrf-cookie'],
'allowed_methods' => ['*'],
'allowed_origins' => ['*'],
'allowed_origins_patterns' => [],
'allowed_headers' => ['*'],
'exposed_headers' => [],
'max_age' => 0,
'supports_credentials' => true,
Run Code Online (Sandbox Code Playgroud)
我很确定我错过了一些小事。如有任何帮助,我将不胜感激
小智 6
在你的后端环境中设置它
SESSION_DOMAIN=localhost
SANCTUM_STATEFUL_DOMAINS=localhost
Run Code Online (Sandbox Code Playgroud)
小智 -2
因为您使用的是 post 方法。您有两种方法可以解决此问题:
1-使用get方法
2-走这条路
app/http/middleware/VerifyCsrfToken.php
Run Code Online (Sandbox Code Playgroud)
并在里面设置你的路径
protected $except = []
Run Code Online (Sandbox Code Playgroud)
对于异常 csrf 令牌。
归档时间: |
|
查看次数: |
4753 次 |
最近记录: |