laravle7.0 Laravel-cors 开发包实现跨域

Laravel 7.0 跨域解决方案

注意:laravel 7.0是默认带有 fruitcake/laravel-cors开发包

1.根据自己所需自定义header头 config/cors.php

    <?php
    return [
        'paths' => ['api/*'],
        'allowed_methods' => ['*'],
        'allowed_origins' => ['*'],
        'allowed_origins_patterns' => ['*'],
        'allowed_headers' => ['*'],
        'exposed_headers' => false,
        'max_age' => false,
        'supports_credentials' => false,
];

2. 添加HandleCors中间件到app/Http/Kernel.php允许所有api跨域,

protected $middleware = [
 ...
    \Fruitcake\Cors\HandleCors::class,
];

$routeMiddleware属性中添加:

protected $routeMiddleware = [
  ...
    'cors' => \Fruitcake\Cors\HandleCors::class,
]

config/app.php中到providers里添加服务提供者:

'providers' => [
  ...
    Fruitcake\Cors\CorsServiceProvider::class,
]

routes/api.php 中添加路由以及cors中间件:

    Route::middleware('cors')->group(function (){
    Route::get('article', function(){
        return response()->json('跨域成功!',200);
    });
});

laravel 7.0之前解决跨域方案

##第一步:创建中间件
php artisan make:middleware EnableCrossRequestMiddleware

##第二步:编辑中间件 app/Http/Middleware/EnableCrossRequestMiddleware.php

<?php 
namespace App\Http\Middleware;
use Closure;
class EnableCrossRequestMiddleware{
    public function handle($request, Closure $next)
    {
        header('Content-Type: text/html;charset=utf-8');
        header('Access-Control-Allow-Origin:*');
        header('Access-Control-Allow-Methods:POST,GET,PUT,OPTIONS,DELETE'); // 允许请求的类型
        header('Access-Control-Allow-Credentials: true'); // 设置是否允许发送 cookies
        header('Access-Control-Allow-Headers: Content-Type,Access-Control-Allow-Origin,Access-token,Content-Length,Accept-Encoding,X-Requested-with, Origin,Access-Control-Allow-Methods'); // 设置允许自定义请求头的字段

        return $next($request);

    }
}

##第三步:注册中间件(全局)app/Http/Kernel.php

<?php

namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{

    protected $middleware = [
    ...
    \App\Http\Middleware\EnableCrossRequestMiddleware::class,
    ];
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 13

我是升级上来的,还要手动安装。

3年前 评论

没用啊

3年前 评论
jiangtaigong 3年前

非得 public 目录 下 index.php 添加 header('Access-Control-Allow-Origin:*'); 才行

3年前 评论
jiangtaigong 3年前

laravel 7 最新版

3年前 评论
ZsmHub

楼上说的对,升级了 v2.0 ,没能解决跨越问题,一脸懵逼! 'paths' => [], // path 默认为空,有问题吗?

3年前 评论
jiangtaigong 3年前

我也不行,public下,用老的方式,这个方式都不行

3年前 评论

这个包真的神奇,就是不生效,源代码也翻了,就是不行

3年前 评论

问题是这个包不生效就算了,还会影响以前的写法

3年前 评论

我现在的跨域无论怎么写都不生效

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!