我在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();
});
});
答案 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的答案。