VUE和Thinkphp6做前后端分离时,跨域请求怎么设置?Access-Control-Allow-Origin设置教程

99次阅读

共计 2643 个字符,预计需要花费 7 分钟才能阅读完成。

TP 运行跨域的方法很多,特别是TP6,就更是简单了,这里分享三种 VUE 和 Thinkphp6 做前后端分离时,跨域请求的设置方法。

一、路由允许跨域请求

其实这种方法相对要好得多,除非你的后端是完全的 restful 对外方服务,否则建议采用第一种方式,即路由中允许跨域请求。

允许所有

1
2
Route::get(‘new/:id’, ‘News/read’)
    ->allowCrossDomain();

单条路由中,如上加上 allowCrossDomain 即可允许跨域请求,如果是分组的路由,也是类似的操作:

1
2
3
4
5
Route::group(‘web’, function() {
    Route::get(‘/’, ‘WebApi/index’);
    Route::get(‘/login’, ‘WebApi/login’);
    Route::post(‘/login’, ‘WebApi/login’);
})->allowCrossDomain();

部分允许

如果想要现在部分域名访问,则这样操作:

1
2
3
4
5
Route::get(‘/’, ‘WebApi/index’)
    ->allowCrossDomain([
        ‘Access-Control-Allow-Origin’        => ‘lanluo.cn’,
        ‘Access-Control-Allow-Credentials’   => ‘true’
    ]);

这是允许一个,允许多个则需要以数组形式传入或直接填写在此处。

1
2
3
4
5
Route::get(‘/’, ‘WebApi/index’)
->allowCrossDomain([
‘Access-Control-Allow-Origin’ => ‘[“lanluo.cn”,”api.lanluo.cn”]’,
‘Access-Control-Allow-Credentials’ => ‘true’
]);

二、路由 中间件

和上面的方法类似,这里以路由分组为例:

1
2
3
4
5
Route::group(‘web’, function() {
    Route::get(‘/’, ‘WebApi/index’);
    Route::get(‘/login’, ‘WebApi/login’);
    Route::post(‘/login’, ‘WebApi/login’);
})->middleware(thinkmiddlewareAllowCrossDomain::class);

在最后加上这个内置的中间件即可实现跨域请求的允许。

控制器中调用中间件也是可以的,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
declare (strict_types = 1);
 
namespace appcontroller;
 
use thinkRequest;
use thinkmiddlewareAllowCrossDomain;
 
class WebApi
{
    protected $middleware = [AllowCrossDomain::class];
 
    public function index(){
        return ‘The Site is building’;
    }
    public function login(){
        $back = [
            ‘data’ => Null,
            ‘meta’=>[
                ‘status’ => 200,
                ‘msg’ => ‘jok_data’
            ]
        ];
        return json($back);
    }
}

再根据自己的需求,构建对应的逻辑代码。

三、全局中间件

不得不说 TP6 确实有可取之处,我们只需要在全局中间件中开启即可。

正文完
 0