Laravel只为一个路由/控制器提供CORS错误

时间:2017-03-20 19:19:22

标签: php angularjs laravel laravel-5

注意:在此问题的底部进行编辑

我有一个非常奇怪的问题,我开始在这个问题上拔头发。我正在使用Angular和Laravel 5.4。

我正在使用Barryvdh\Cors并且它工作正常。但是由于某种原因,我只得到一个控制器的以下错误,没有别的!

  

阻止跨源请求:同源策略禁止读取   远程资源在   http://www.example.com/packing?data_type=prealert&shipment_ref=1。   (原因:在CORS标头中缺少令牌'access-control-allow-headers'   来自CORS预检频道的“Access-Control-Allow-Headers”。

这只发生在packing

这是我的路线(为了便于阅读,我省略了许多其他行):

    Auth::routes();

    Route::get('/', 'HomeController@index');

    Route::group([ 'middleware' => 'cors'], function()
    {

        // works
        Route::resource('prealert', 'PrealertController');

        // doesnt work
        Route::resource('packing', 'PackingController');

        // works
        Route::resource('shipping', 'ShippingController');

    });

我正在比较下面的两个控制器,你可以看到它们是完全相同的(我想??)。

然而,如果我改变

Route::resource('packing', 'PackingController');

Route::resource('packing', 'PrealertController');

工作正常。

我假设AngularJS方面没什么,因为我已经能够将它缩小到简单的那条线,即即使代码是相同的,我也只是使用另一个控制器。

这是我的PackingController(Http / Controllers / PackingController.php)

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests\PublishPackingRequest;
use Mockery\CountValidator\Exception;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use DB;
use Auth;


class PackingController extends Controller {

    public function index( ) {

        die('test');

    }

}

我的PrealertController(Http / Controllers / PrealertController.php)

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests\PublishPrealertRequest;
use Mockery\CountValidator\Exception;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Auth;
use DB;

class PrealertController extends Controller {


    public function index() {
        die('test');
    }

}

修改

所以它变得更加奇怪,我将我的PackingController.php复制到一个名为AnotherController.php的文件中,并将我的路线更改为以下内容......

Route::resource('packing', 'AnotherController');

我还将类名更改为AnotherController

即便如此有效!也许我应该尝试删除文件

3 个答案:

答案 0 :(得分:0)

看起来您的控制器可能会卡在名称空间自动加载缓存中?我会尝试以下方法解决它,从

开始
composer -o dump-autoload

然后执行路由缓存刷新

php artisan route:cache

然后最后使用

检查路线是否确实存在
php artisan route:list  

我还会检查您是否可以看到CORS中间件正在应用于路由,因为您没有将其用作全局中间件。它应该像下面图片中的中间件部分下的“ oauth,api.company,api.user enter image description here

如果这不能解决问题,那么我会检查控制器的Camel外壳是否处于正确的顺序,匹配来自Actions部分的路径:list

答案 1 :(得分:0)

为了使包工作,请求必须是有效的CORS请求,并且需要包含" Origin"报头中。

发生错误时,中间件不能完全运行。因此,当发生这种情况时,您将无法看到实际结果,但会收到CORS错误。

检查您的操作是否正常运行。

答案 2 :(得分:0)

我遇到了同样的问题,我的所有路径都可以运行,但是只有一条,而且我知道该路径及其控制器自从我用Postman测试后就可以正常工作了。实际发生的事情是我的Angular(5)由于某种原因(我正在发送JSON)自动将请求类型设置为OPTIONS。将其更改为POST为我解决了这个问题,我通过按照应用程序中所有其他POST请求发送FormData来解决了该问题。 始终检查您的网络标签