【问题标题】:Laravel CORS does not work when setting cookies [duplicate]设置cookie时Laravel CORS不起作用[重复]
【发布时间】:2021-11-16 05:32:36
【问题描述】:

我在 Laravel 应用程序中为 CORS 使用 \Fruitcake\Cors\HandleCors 中间件。

我的cors.php 文件如下所示:

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

    'allowed_methods' => ['POST', 'GET', 'DELETE', 'PUT', '*'],

    'allowed_origins' => ['http://localhost:3000', 'https://localhost:3000'],

    'allowed_origins_patterns' => [],

    'allowed_headers' => ['*'],

    'exposed_headers' => [],

    'max_age' => 0,

    'supports_credentials' => true,

我正在设置 cookie 作为响应:

$access_cookie = Cookie::make('access_token', $access_token, $cookieLife, null, null, true);
$refresh_cookie = Cookie::make('refresh_token', $refresh_token, $MINUTES_IN_ONE_YEAR, null, null, true);
    
    
     return response()
                ->json(['tokens' => ['access_token' => $access_token, 'refresh_token' => $refresh_token], 'user' => $user])->withCookie($access_cookie)->withCookie($refresh_cookie);

最后,我从 https://localhost:3000 上运行的 React 应用程序调用这个 api 端点

它给了我一个错误,说 CORS 不允许(经典 CORS 错误)。

但是当我从响应中删除 cookie 时,它​​工作正常。

我还需要什么其他设置才能让它工作?

【问题讨论】:

标签: php laravel cors laravel-8


【解决方案1】:

不确定这是否是您要寻找的,但我使用的是 laravel 5.3,并且必须为从另一个应用程序对我的应用程序进行的 API 调用添加 CORS 支持,这就是我所做的。

在 app\Http\Middlewear 中,我创建了一个名为 Cors.php 的文件并将其放在以下位置:

<?php namespace App\Http\Middleware;

use Closure;

 class Cors {

/**
 * Handle an incoming request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Closure  $next
 * @return mixed
 */
public function handle($request, Closure $next)
{

    header("Access-Control-Allow-Origin: *");

    // ALLOW OPTIONS METHOD
    $headers = [
        'Access-Control-Allow-Methods'=> 'POST, GET, OPTIONS, PUT, DELETE',
        'Access-Control-Allow-Headers'=> 'Content-Type, X-Auth-Token, Origin'
    ];
    if($request->getMethod() == "OPTIONS") {
        // The client-side application can set only headers allowed in Access-Control-Allow-Headers
        return Response::make('OK', 200, $headers);
    }

    $response = $next($request);
    foreach($headers as $key => $value)
        $response->header($key, $value);
    return $response;
}

}

然后在我添加的受保护的 $routeMiddleware 内的 App\Http\Kernel.php 中

   'cors' => \App\Http\Middleware\Cors::class,

然后在我的路线中需要 CORS 我添加了中间件

    Route::post('/my/api/call', 'MyController@MyApiRoute')->middleware(['cors']);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-28
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    • 2013-09-18
    相关资源
    最近更新 更多