laravel-s icon indicating copy to clipboard operation
laravel-s copied to clipboard

Cross-domain middleware compatibility issues after using Dingo API

Open barretzhi opened this issue 6 years ago • 21 comments

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

barretzhi avatar Apr 17 '18 09:04 barretzhi

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

hhxsv5 avatar Apr 17 '18 11:04 hhxsv5

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

barretzhi avatar Apr 18 '18 00:04 barretzhi

第三方包吗?文件发下。

hhxsv5 avatar Apr 18 '18 01:04 hhxsv5

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

barretzhi avatar Apr 18 '18 01:04 barretzhi

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

hhxsv5 avatar Apr 18 '18 02:04 hhxsv5

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

barretzhi avatar Apr 18 '18 02:04 barretzhi

_ _20180418103047

barretzhi avatar Apr 18 '18 02:04 barretzhi

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

hhxsv5 avatar Apr 18 '18 02:04 hhxsv5

@barretzhi 细聊 QQ群:698480528

hhxsv5 avatar Apr 18 '18 02:04 hhxsv5

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

barretzhi avatar Apr 18 '18 02:04 barretzhi

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

hhxsv5 avatar Apr 19 '18 01:04 hhxsv5

好的,谢谢

barretzhi avatar Apr 19 '18 01:04 barretzhi

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

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

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

hhxsv5 avatar Apr 25 '18 10:04 hhxsv5

哈哈,我是这样做的

barretzhi avatar Apr 25 '18 10:04 barretzhi

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

dickwu avatar Sep 02 '18 14:09 dickwu

@dickwu 也不错

hhxsv5 avatar Sep 02 '18 14:09 hhxsv5

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.

Eli-jah avatar Dec 28 '18 08:12 Eli-jah

image

image

uniteweiwei avatar Jul 16 '21 09:07 uniteweiwei

目前还是不支持dingo吗?

FlameMida avatar Apr 13 '22 02:04 FlameMida

@FlameMida 是的

hhxsv5 avatar Apr 13 '22 14:04 hhxsv5

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

dengao123 avatar Nov 30 '22 07:11 dengao123