Laravel 6.0. * Паспорт не работает с php -fpm + nginx: «Метод GET не поддерживается для этого маршрута» при отправке POST - PullRequest
0 голосов
/ 18 марта 2020

Для моего внутреннего API-приложения у меня есть Laravel 6 с Laravel Passport oAuth2 плагином. Im my routes/web.php Я использую Auth::routes(); для создания всех маршрутов oAuth. Мой Nginx config (работает на экземпляре Amazon):

/etc/nginx/conf.d/app.conf

server {
    server_name  my-app-domain.net;
    listen 80;
    client_max_body_size 20M;

    include /etc/nginx/default.d/*.conf;
    root   /var/www/app/public;

    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.html index.php;

    location ~ /\. {
        deny all;
    }  

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }


    error_page  404  /index.php;

    error_page   500 502 503 504  /index.php;

    location ~* \.(?:ico|css|otf|gif|jpe?g|png)$ {
        expires 30d;
        add_header Pragma public;
        add_header Cache-Control "public";
        root    /var/www/app/public;
    }

    location ~ \.php$ {
        fastcgi_index  index.php;
        fastcgi_pass unix:/run/php-fpm/www.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

Если я отправлю POST с grant_type и другими учетными данными для входа в систему http://<domain name>/oauth/token, я получаю эта странная ОШИБКА:

"Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException Метод GET не поддерживается для этого маршрута. Поддерживаемые методы: POST."

Помимо этого, другие запросы API работают нормально, поэтому, вероятно, это не ограничения CORS

Однако, если я запускаю php artisan serve и отправляю POST на http://localhost:8080/oauth/token, он работает как положено

1 Ответ

0 голосов
/ 18 марта 2020

Я ошибался насчет CORS. Несмотря на то, что я установил barryvdh/laravel-cors пакет, а настройки установлены на «*», CORS все еще оставалась проблемой. Поэтому мне пришлось немного подправить Nginx

server {
server_name  my-app-domain.net;
listen 80;
client_max_body_size 20M;

include /etc/nginx/default.d/*.conf;
root   /var/www/app/public;

add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Headers' '*' always;
add_header 'Access-Control-Allow-Credentials' 'true' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS' always;
add_header 'Access-Control-Allow-Headers' 'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Requested-With' always;

index index.html index.php;
charset utf-8;
.....

Плагин barryvdh/laravel-cors также необходимо удалить

...