首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >laravel之跨域请求(二)「建议收藏」

laravel之跨域请求(二)「建议收藏」

作者头像
全栈程序员站长
发布2022-08-09 19:09:16
发布2022-08-09 19:09:16
1.4K0
举报

大家好,又见面了,我是你们的朋友全栈君。

1,方法一:通过扩展包解决

扩展包地址:barryvdh/laravel-cors

(1)安装,项目根目录

代码语言:javascript
复制
composer require barryvdh/laravel-cors

Laravel 5.4 及以下版本需要手动在 config/app.php 中注册服务提供者:

代码语言:javascript
复制
Barryvdh\Cors\ServiceProvider::class,

(2)使用 全局使用的中间件,在app/Http/kernel.php 文件:

代码语言:javascript
复制
protected $middleware = [
    // ...
    \Barryvdh\Cors\HandleCors::class,
];

特定路由中应用 CORS

代码语言:javascript
复制
protected $middlewareGroups = [
    'web' => [
       // ...
    ],

    'api' => [
        // ...
        \Barryvdh\Cors\HandleCors::class,
    ],

(3)配置 自定义配置,laravel-cors 扩展包的配置文件发布到 config 目录下:

代码语言:javascript
复制
php artisan vendor:publish --provider="Barryvdh\Cors\ServiceProvider" 

以下是该配置文件默认配置值(config/cors.php):

代码语言:javascript
复制
eturn [

    /* |-------------------------------------------------------------------------- | Laravel CORS |-------------------------------------------------------------------------- | | allowedOrigins, allowedHeaders and allowedMethods can be set to array('*') | to accept any value. | */

    'supportsCredentials' => false,
    'allowedOrigins' => ['*'],
    'allowedOriginsPatterns' => [],
    'allowedHeaders' => ['*'],
    'allowedMethods' => ['*'],
    'exposedHeaders' => [],
    'maxAge' => 0,

];

以上步骤操作完,发起请求会报403错误,具体没找原因,知道小伙伴,可留言。

在gitHub上面找到了问题:

我使用的是 laravel 5.7 api + dingo + laravel-cors not work,需要在 config/app.php 中操注册服务提供者:

代码语言:javascript
复制
'providers' => [
	Barryvdh\Cors\ServiceProvider::class	
]

所以上面提到的laravel5.4<=版本需要添加,这个需要根据具体情况而定。

2,方法二:通过自定义中间件解决

1,新建一个中间件

代码语言:javascript
复制
php artisan make:middleware EnableCrossRequestMiddleware

2.CrossRequestMiddleware.php

代码语言:javascript
复制
?php
namespace App\Http\Middleware;
use Closure;
class CrossRequestMiddleware
{ 
   
    /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */
    public function handle($request, Closure $next)
    { 
   
        $response = $next($request);
        $origin = $request->server('HTTP_ORIGIN') ? $request->server('HTTP_ORIGIN') : '';
        $allow_origin = [
            'http://localhost:8000',
        ];
        if (in_array($origin, $allow_origin)) { 
   
            $response->header('Access-Control-Allow-Origin', $origin);
            $response->header('Access-Control-Allow-Headers', 'Origin, Content-Type, Cookie, X-CSRF-TOKEN, Accept, Authorization, X-XSRF-TOKEN');
            $response->header('Access-Control-Expose-Headers', 'Authorization, authenticated');
            $response->header('Access-Control-Allow-Methods', 'GET, POST, PATCH, PUT, OPTIONS,DELETE');
            $response->header('Access-Control-Allow-Credentials', 'true');
        }
        return $response;
    }
}

3,全局使用,注册该中间件

代码语言:javascript
复制
 protected $middleware = [
        // more
        App\Http\Middleware\CrossRequestMiddleware::class,
    ];

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/105842.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年4月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1,方法一:通过扩展包解决
  • 2,方法二:通过自定义中间件解决
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档