Laravel上的CORS(Access-Control-Allow-Origin)

时间:2016-08-03 16:57:32

标签: php laravel laravel-5 cors

我在AngularJS中创建了一个应用程序,并试图调用Laravel API:

我使用Laravel API Boilerplate (JWT Edition)来API。

但我在浏览器控制台中收到此错误:

  

XMLHttpRequest无法加载http://localhost:8000/api/auth/login。 No' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' http://localhost:8080'因此不允许访问。

我尝试在api_routes.php中应用cors中间件(barryvdh / laravel-cors),但错误仍然存​​在。

api_routes.php:

<?php

$api = app('Dingo\Api\Routing\Router');

$api->version('v1', ['middleware' => 'cors'], function ($api) {

    $api->post('auth/login', 'App\Api\V1\Controllers\AuthController@login');
    $api->post('auth/signup', 'App\Api\V1\Controllers\AuthController@signup');
    $api->post('auth/recovery', 'App\Api\V1\Controllers\AuthController@recovery');
    $api->post('auth/reset', 'App\Api\V1\Controllers\AuthController@reset');

    // example of protected route
    $api->get('protected', ['middleware' => ['api.auth'], function () {     
        return \App\User::all();
    }]);

    // example of free route
    $api->get('free', function() {
        return \App\User::all();
    });

});

6 个答案:

答案 0 :(得分:1)

我对这个实现完全错了。 origin标题在Laravel中有一个特定的展示位置,其中可以在中间件中定义其他标题,origin标题不能

相反,您需要将其添加到主routes.php文件的顶部:

header('Access-Control-Allow-Origin: http://localhost:8080');

答案 1 :(得分:1)

您可以创建Cors中间件类并添加到kenel.php中的应用程序的全局HTTP中间件堆栈中。此堆栈中的中间件将在对您的应用程序的每个请求期间运行。

有关详情,请参阅this

答案 2 :(得分:0)

我不完全理解这一点,但是当我想要跨浏览器访问时,我将.htaccess文件添加到我的端点所在的文件夹中,其中包含以下内容:

Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"

答案 3 :(得分:0)

你应该使用代理传递添加一个指向你的api的nginx虚拟主机。基本上你需要确保你的前端和后端都来自同一个域

答案 4 :(得分:0)

大部分 CORS 问题都与服务器相关,如果 .htaccess 没有解决它,您可以从应用程序启动文件中提供相同的标头。所以对域名有了解,其中指向应用程序的文件夹路径。在 Laravel 中 index.php 是启动文件,因此使用以下代码行并添加起始行。

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: PUT, GET, POST, DELETE, OPTIONS");
header("Access-Control-Allow-Headers: *");

加载网络应用所需的浏览器缓存清除

答案 5 :(得分:-1)

根据您放置路线的位置,将其添加到routes.php文件或api.php文件的顶部:

header('Access-Control-Allow-Origin: http://localhost:8080');
header('Access-Control-Allow-Headers: origin, x-requested-with, content-type');
header('Access-Control-Allow-Methods: PUT, GET, POST, DELETE, OPTIONS');

在您提出请求的站点中添加这3行,可以解决CORS问题。上面的代码将允许在http://localhost:8080上运行的JS向包含上述行的后端发出请求。

答案来自@Dallas Caley的答案。