axios 我需要在SANCTUM_STATEFUL_DOMAINS中写入什么,以便我可以从本地地址的不同端口登录?

qhhrdooz  于 2022-11-05  发布在  iOS
关注(0)|答案(2)|浏览(115)

我需要在React上登录我的SPA,它在127.0.0.1:8000上工作
Laravel在127.0.0.1:3000上工作。当我使用axios请求时,我在chrome中的日志中得到错误:
CORS策略已阻止从源“http://localhost:3000”访问位于“http://localhost:8000/login”的XMLHttpRequest:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。
在sanctum.php中我添加了

'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf(
        '%s%s',
        'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,localhost:8000,127.0.0.1:3000,::1',
        Sanctum::currentApplicationUrlWithPort()
    ))),

在.env中,我写入SANCTUM_STATEFUL_DOMAINS=127.0.0.1:3000并尝试使用SANCTUM_STATEFUL_DOMAINS=127.0.0.1:8000,但它也不起作用;在文档中,我只找到了域和子域的信息,但我不处理域。
当然,我可以写在'cors.php' 'paths' => ['api/*', 'sanctum/csrf-cookie', 'login'],但我认为是坏的解决方案。
请求代码axios:

const config={
        headers:{
            accept:'application/json',
            referer:'127.0.0.1:8000/',
            'Access-Control-Allow-Origin':'*'
        }
    }
    function fetchCookie(){
        const response = axios.get('http://localhost:8000/sanctum/csrf-cookie')
        const response1 = axios.post('http://localhost:8000/login',loginData,config)
        console.log(response1);
    }

因此,我应该在哪里写,写什么,让它为我工作。
提前为我的英语道歉

wpx232ag

wpx232ag1#

在你的Laravel应用中,你需要设置特定的HTTP响应头。这些特定的头通常被称为CORS头,因为它们告诉浏览器可以将这些HTTP请求发送到localhost:8000。
Where can I set headers in laravel
https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
这个单一的HTTP响应头应该是您所需要的最小值:

Access-Control-Allow-Origin: *

但你也可以更明确地说:

Access-Control-Allow-Origin: http://localhost:3000
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: Content-Type
mqxuamgl

mqxuamgl2#

需要创建一个中间件如何回答@RaphaelRafatpanah,并添加在它的标题。

public function handle(Request $request, Closure $next)
    {
        $response = $next($request);
        $response->header('Access-Control-Allow-Origin', 'http://127.0.0.1:3000');
        $response->header('Access-Control-Allow-Methods', 'POST, GET, OPTIONS');
        $response->header('Access-Control-Allow-Headers', 'x-xsrf-token,Content-Type,withcredentials');
        $response->header('Access-Control-Allow-Credentials', 'true');
        return $response;
    }

这些标题将解决初始错误和后续错误。

相关问题