Laravel 5.8 / VueJs 2 / GET-запрос Axios не отправляет куки (CORS, поддомен) - PullRequest
1 голос
/ 01 ноября 2019

Настройка

У нас есть сервер с доменом test.de и двумя приложениями A и B, работающими на одном сервере, но на поддоменах:

a.test.de
b.test.de

Проблема

A отправляет запрос GET в API B, но он всегда отправляет запрос без файлов cookie, даже если и должен.

Поскольку конечная точка защищена, мы всегда получаем 401 Unauthorized назад. Запросы к незащищенным конечным точкам на B не вызывают проблем, потому что им не нужны файлы cookie.

То, что мы пробовали:

  • withCredentials: true по запросу
  • withCredentials установлен на true по умолчанию по умолчанию
  • laravel-cors пакет сконфигурирован максимально свободно
<?php

return [
    'supportsCredentials' => true,
    'allowedOrigins' => ['*'],
    'allowedOriginsPatterns' => [],
    'allowedHeaders' => ['*'],
    'allowedMethods' => ['*'],
    'exposedHeaders' => [],
    'maxAge' => 0,
];

  • настройка same_site в config/session.php is null
  • SESSION_DOMAIN в обоих приложениях установлено на .test.de
  • промежуточное ПО, которое устанавливает заголовок cors (как должны делать laravel-cors)
  • проверенов Google Chrome, Safari, Firefox
  • запросы к защищенной конечной точке на сайте (так A-> A или B-> B) работают, потому что куки отправляются
  • , мы попробовали еще много вещей, которыеЯ не помню, но буду добавлять, если они всплывают или упоминаются в комментариях

Ответы [ 2 ]

1 голос
/ 04 ноября 2019

Кажется, у нас возникли проблемы с правами доступа на нашем сервере, из-за которых не обновлялся код веб-интерфейса, и поэтому опция withCredentials не выполнялась.

У кого бы то ни было в будущем, пожалуйста, прочитайте вопрос ивы увидите то, что мы попробовали. Важно понимать, что для CORS определенные заголовки необходимо отправлять туда и обратно, чтобы разрешить отправку файлов cookie.

Извините за гудение ...

0 голосов
/ 01 ноября 2019

Попробуйте промежуточное ПО ниже ... Если это не поможет, я удалю ответ;)

<?php

namespace App\Http\Middleware;

use Closure;
use Symfony\Component\HttpFoundation\StreamedResponse;

class ModifyHeadersMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $response = $next( $request );
        if($response instanceof StreamedResponse) {
            $response->headers->set('Access-Control-Allow-Origin', '*' );
            $response->headers->set( 'Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Authorization, Accept, Application' );
            $response->headers->set( 'Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS' );
        } else {
            $response->header( 'Access-Control-Allow-Origin', '*' );
            $response->header( 'Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Authorization, Accept, Application' );
            $response->header( 'Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS' );
        }

        return $response;
    }
}

...