【问题标题】:How to add CORS middleware with auth:api passport middleware in Laravel?如何在 Laravel 中使用 auth:api 护照中间件添加 CORS 中间件?
【发布时间】:2021-04-03 12:03:36
【问题描述】:

我已将 Laravel Passport 用于经过身份验证的端点。我正面临这些 API 的 CORS 问题。

在 app/Http/Middleware/Cors.php 中

<?php

namespace App\Http\Middleware;

use Closure;

class Cors
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        return $next($request)
            ->header('Access-Control-Allow-Origin', "*")
                ->header('Access-Control-Allow-Methods', "PUT,POST,DELETE,GET,OPTIONS")
                ->header('Access-Control-Allow-Headers', "Accept,Authorization,Content-Type");
    }
}

在app/Http/Kernel.php中,添加到中间件数组中

\App\Http\Middleware\Cors::class,

在路由/api.php中,

Route::post('auth/login', 'PassportController@login'); //working 
Route::middleware('auth:api')->group(function () {
Route::get('vehicle/all', 'VehicleController@getVehicles'); //not working: facing CORS error
});

我已使用 auth:api (Laravel 护照) 进行授权。我面临 auth:api 组中端点的 CORS 错误。像“auth/login”这样的组外端点工作正常。 如何处理 Route::middleware('auth:api') 组内的 cors 错误?

【问题讨论】:

  • 'Access-Control-Allow-Origin', "*" 不再被浏览器接受,需要指定域

标签: laravel cors laravel-passport


【解决方案1】:

您需要指定允许的域,通配符'*'不再被浏览器接受。

如果您有多个域调用您的 api,您可以使用 $_SERVER['HTTP_HOST'] 使其动态化

<?php

namespace App\Http\Middleware;

use Closure;

class Cors
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $domain = $request->getHost();
        // or $domain =  $_SERVER['HTTP_HOST'];
        return $next($request)
            ->header('Access-Control-Allow-Origin', $domain)
                ->header('Access-Control-Allow-Methods', "PUT,POST,DELETE,GET,OPTIONS")
                ->header('Access-Control-Allow-Headers', "Accept,Authorization,Content-Type");
    }
}

【讨论】:

  • 谢谢@N69S。问题解决了。我直接将域 url 放入 $domain 并修改了 Access-Control-Allow-Headers... header('Access-Control-Allow-Headers', "Accept,Authorization,Content-Type,Access-Control-Allow-Headers,访问控制允许方法");
猜你喜欢
  • 2017-03-23
  • 2021-12-08
  • 2018-08-07
  • 2017-04-04
  • 2021-01-21
  • 2021-08-21
  • 1970-01-01
  • 2017-07-17
  • 2018-10-26
相关资源
最近更新 更多