laravel 中间件跨域自定义封装

laravel 跨域cors中间件封装

<?php
namespace App\Http\Middleware;

use Closure;

class CorsMiddleware
{

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $headers = [
            'Access-Control-Allow-Origin'      => '*',
            'Access-Control-Allow-Methods'     => 'POST, GET, OPTIONS, PUT, DELETE',
            'Access-Control-Allow-Credentials' => 'true',
            'Access-Control-Max-Age'           => '86400',
            'Access-Control-Allow-Headers'     => 'Origin, Content-Type, Cookie, X-CSRF-TOKEN, Accept, Authorization, X-XSRF-TOKEN'
        ];

        //为空表示允许所有IP和域名访问
        $allow_origin = config('cors') ?? [];//格式:'http://127.0.0.1:8080',//允许访问
        $origin = $request->server('HTTP_ORIGIN') ?? $_SERVER['HTTP_ORIGIN'] ?? $request->header('Origin') ?? '';
        if(!empty($allow_origin) && !in_array($origin,$allow_origin))
        {
            return response()->json('Forbidden 403 ,Please add to allow access whitelist', 403, $headers);
        }

        if ($request->isMethod('OPTIONS'))
        {
            return response()->json('{"method":"OPTIONS"}', 200, $headers);
        }

        $response = $next($request);
        foreach($headers as $key => $value)
        {
            $response->header($key, $value);
        }

        return $response;
    }
}

有需要的可以参考

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Nuxt中,可以使用中间件来处理跨域请求。您可以在~/server/middleware目录中创建一个文件,并在该文件中编写中间件的逻辑。这些中间件文件将在每个请求上运行,并且可以用于添加公共标头、记录响应或修改传入请求对象以供以后在请求链中使用。 在Django中,您可以使用@csrf_exempt装饰器来避免跨站请求伪造(CSRF)的限制。通过在视图函数上应用该装饰器,您可以允许跨域的请求。例如,在一个名为add_bookshelf的视图函数上应用@csrf_exempt装饰器,就可以避免CSRF限制。 而在server/middleware/marking-center.ts中的代码是一个示例,它使用了Django的中间件来处理跨域请求。通过导入csrf_exempt装饰器,并在视图函数上应用该装饰器,可以避免CSRF限制。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [nuxt3:接口转发,实现跨域](https://blog.csdn.net/snowball_li/article/details/129035109)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [django 取消csrf限制的实例](https://download.csdn.net/download/weixin_38748207/14850740)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值