Проблема с Laravel 5.6 CORS

Я следил за эта почта, но он работал только для метода GET (как вы можете видеть, он упоминается в комментариях). Я также установил этот пакет, но опять же, он работает только для метода GET. Это ошибка, которую я получаю:

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin my origin is therefore not allowed access. The response had HTTP status code 403.

Версия PHP: 7.1

Версия Laravel: 5.6

Приложение Frontend: приложение angular (нужно ли здесь что-то менять?)

//Cours.php (middleware I created myself using the first method)
class Cors
{
    public function handle($request, Closure $next)
    {
        return $next($request)
            ->header('Access-Control-Allow-Origin', '*')
            ->header('Access-Control-Allow-Methods', 'GET, POST, PUT,         
DELETE, OPTIONS');
    }
}


//cors.php (config/cors.php second method using the laravel-cors package)
return [

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


//kernel.php
namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{

protected $middleware = [
    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
    \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
    \App\Http\Middleware\TrimStrings::class,
    \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    \App\Http\Middleware\TrustProxies::class,
    \Barryvdh\Cors\HandleCors::class,
];

protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        // \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],

    'api' => [
        'throttle:60,1',
        'bindings',
    ],
];


protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
    'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
    'can' => \Illuminate\Auth\Middleware\Authorize::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    'cors' => \App\Http\Middleware\Cors::class,
];
}

Установите ссылку на этот пакет "github.com/barryvdh/laravel-cors" и повторно запустите проект, очистив config, route.

Sachin Kumar 29.05.2018 18:48

Я упомянул тот факт, что уже тестировал этот пакет в вопросе. Но у меня такая же ошибка.

Kasra GH 29.05.2018 18:49

Сделаем еще кое-что. Вместо добавления * к источнику добавьте URL-адрес вашего приложения laravel. И я ожидаю, что вы очистите кеш, маршрут и конфигурацию вашего проекта laravel.

Sachin Kumar 29.05.2018 18:51

У меня такая же ошибка

Kasra GH 29.05.2018 19:01

Я также настроил проект с таким же требованием. В первый раз это дает мне ошибку, но после повторного запуска работает. В любом случае, не могли бы вы обновить свой вопрос с помощью kernel.php и cors.php (файл конфигурации)

Sachin Kumar 29.05.2018 19:03

Я добавил те, которые ты хотел

Kasra GH 29.05.2018 19:11

Вы сказали, что используете пакет "\ Barryvdh \ Cors \ HandleCors :: class", тогда зачем вам создавать промежуточное ПО cors?

Sachin Kumar 29.05.2018 19:12

Я тестировал два разных метода. Первый метод - это тот, который упоминается в другом вопросе о стеке (но не сработал). Второй способ - использовать пакет laravel-cors (тоже не сработал).

Kasra GH 29.05.2018 19:13

Позвольте нам продолжить обсуждение в чате.

Sachin Kumar 29.05.2018 19:14

У меня аналогичная проблема с пакетом Barryvdh \ Cors. Проблема заключалась в том, что запрос Cross-Origin заблокирован: та же политика происхождения запрещает чтение удаленного ресурса в ip / загрузка. (Причина: ожидалось 'true' в заголовке CORS 'Access-Control-Allow-Credentials'.) Я изменил 'supportsCredentials' => true в config / cors.php. Я думаю, что проблема, связанная с 'Orgin', упоминается в laravel-cors /readme.md в качестве примечания. Примечание. Если вы явно добавляете заголовки в белый список, вы должны включить Origin, иначе запросы не будут распознаваться как CORS.

Shaju Nr 22.06.2018 07:35
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
10
10 288
3

Ответы 3

Вы также можете использовать отличный пакет laravel-cors от barryvdh.

После установки пакета самый простой способ получить поддержку CORS для всех ваших маршрутов - это добавить промежуточное ПО, подобное этому, в Http / Kernel.php: ($ middleware)

\Barryvdh\Cors\HandleCors::class

И отредактировать config/Cors.php'allowedOrigins' => ['*']

Подробнее проверить https://github.com/barryvdh/laravel-cors/blob/master/readme.md

Пожалуйста, внимательно прочтите вопрос. Я упомянул, что использовал этот пакет и получил ту же ошибку. Только GET работает

Kasra GH 29.05.2018 20:53

вам нужно использовать первый метод эта почта без использования какого-либо пакета, затем добавить этот класс в protected $middleware, например эта почта, тогда метод публикации также имеет желаемые заголовки.

у меня это работает, надеюсь сработает для вас.

Для laravel-cors не нужны никакие типы пакетов. Просто создайте промежуточное ПО:

namespace App\Http\Middleware;
use Closure;
class Cors {

    public function handle($request, Closure $next) {
        $allowedOrigins = ['http://myroute.xyz', 'http://clarkconcepts.net','http://localhost'];
        $origin = isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN'] : '';
        if (in_array($origin, $allowedOrigins)) {
            return $next($request)
                ->header('Access-Control-Allow-Origin', $origin)
                ->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS')
                ->header('Access-Control-Allow-Headers',' Origin, Content-Type, Accept, Authorization, X-Request-With, cache-control,postman-token, token')
                ->header('Access-Control-Allow-Credentials',' true');
        }
        return $next($request);
    }
}

В приложении / Http / Kernel.php добавить Middleware в раздел $ middleware:

protected $middleware = [
    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
    \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
    \App\Http\Middleware\TrimStrings::class,
    \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    \App\Http\Middleware\TrustProxies::class,
    \App\Http\Middleware\Cors::class, //added here
];

Другие вопросы по теме