hhxsv5 / laravel-s

LaravelS is an out-of-the-box adapter between Laravel/Lumen and Swoole.
MIT License
3.83k stars 473 forks source link

Cross-domain middleware compatibility issues after using Dingo API #28

Open barretzhi opened 6 years ago

barretzhi commented 6 years ago

跨域中间件用的LumenCors , 每次php artisan laravels start 后 前几次 Access-Control-Allow-Origin:* 响应头还是成功的, 几次请求一走 响应头设置的cors 中间件就无效了 _ _20180417174001 _ _20180417174021

hhxsv5 commented 6 years ago

是否使用的PHP原生header()函数? 不能使用的函数

barretzhi commented 6 years ago

@hhxsv5 我看了 那个包没有使用原生的header() _ _20180418084656

hhxsv5 commented 6 years ago

第三方包吗?文件发下。

barretzhi commented 6 years ago

@hhxsv5 https://github.com/palanik/lumen-cors

hhxsv5 commented 6 years ago

测试了,没问题。 4348e083-4a3e-4d40-bd94-87143f20851e

barretzhi commented 6 years ago

我也测试没问题,但请求几次就不行了 _ _20180418101752

barretzhi commented 6 years ago

_ _20180418103047

hhxsv5 commented 6 years ago

body数据都正常吗?怀疑代码没走到中间件。

hhxsv5 commented 6 years ago

@barretzhi 细聊 QQ群:698480528

barretzhi commented 6 years ago

body 正常的,我也在怀疑没走到中间件。 我发现服务启动后bootstarp/app.php 下的文件在每次请求的时候都不走

hhxsv5 commented 6 years ago

Dingo Api中干掉了Application的全局中间件。 https://github.com/dingo/api/blob/master/src/Routing/Adapter/Lumen.php#L253 目前还没有较好的办法解决,我再想想看

barretzhi commented 6 years ago

好的,谢谢

hhxsv5 commented 6 years ago

不用中间件实现CORS,直接Response对象带上Header吧。这是目前较理想的解决方案。

public function index(Request $req)
{
    $headers = [
        'Access-Control-Allow-Origin' => '*',
        //...
    ];
    $data = ['now' => time()];
    return response()->json($data, 200, $headers);
}

然后,再统一封装一个Trait来做响应。

barretzhi commented 6 years ago

哈哈,我是这样做的

dickwu commented 6 years ago

跨域问题可以用nginx解决,这样又快又不需要引入那个包

hhxsv5 commented 6 years ago

@dickwu 也不错

Eli-jah commented 5 years ago

Problem solved partially, at least by now. Here is the solution:

Coding @ config/laravels.php as follows:

'register_providers' => [
        /* middleware service providers */
        Dingo\Api\Provider\DingoServiceProvider::class,
        Dingo\Api\Provider\HttpServiceProvider::class,
        /* auth service providers */
        Illuminate\Auth\AuthServiceProvider::class,
        App\Providers\AuthServiceProvider::class,
        Tymon\JWTAuth\Providers\LaravelServiceProvider::class,
],

Git it a try, and wish it would work for you, too.

uniteweiwei commented 3 years ago

image

image

FlameMida commented 2 years ago

目前还是不支持dingo吗?

hhxsv5 commented 2 years ago

@FlameMida 是的

dengao123 commented 1 year ago

我这也是请求一段时间就报跨域错误,没用djingo。用的\Medz\Cors\Laravel\Middleware\ShouldGroup中间件.求大佬帮忙,卡了2,3天了。