我有一个基于Quasar和Capacitor构建的应用程序,其中一个API构建在Laravel之上。在开发环境中一切都运行良好,直到我在手机上构建并安装应用程序,然后我一直超时,决定构建一个SPA并使用Liteserver运行它,结果发现服务器返回了一个:“Access to XMLHttpRequest at 'https://smk.toneflix.com.ng/api/pages/about' from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
“错误。
在我的Kernel.php上,我有这个:
protected $middleware = [
// \App\Http\Middleware\TrustHosts::class,
\App\Http\Middleware\TrustProxies::class,
\Illuminate\Http\Middleware\HandleCors::class,
\App\Http\Middleware\PreventRequestsDuringMaintenance::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
];
在我的cors.php配置文件中,我还有这个:
return [
'paths' => ['*'],
'allowed_methods' => ['*'],
'allowed_origins' => ['*'],
'allowed_origins_patterns' => [],
'allowed_headers' => ['*'],
'exposed_headers' => [],
'max_age' => 0,
'supports_credentials' => true,
];
我在sanctum.php配置中也有这个
return [
'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf(
'%s%s',
'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1',
Sanctum::currentApplicationUrlWithPort(),
env('APP_URL') ? ','.parse_url(env('APP_URL'), PHP_URL_HOST) : '',
env('FRONTEND_URL') ? ','.parse_url(env('FRONTEND_URL'), PHP_URL_HOST) : ''
))),
...
]
我已经尝试了其他几个配置选项,以及其他SO答案的建议,但没有帮助。Postman中的一切都可以正常工作,如果我在API域上创建一个子域并托管一个SPA,但这不是我想要的,当在真实的设备上运行时,我需要在本机应用程序上通过请求。
编辑
我发现我的设备从https://localhost
发出请求,所以我将其添加到FRONTEND_URL
环境变量中,它工作了,但我确实明白这是不可持续的,因为我无法控制我的应用程序将在哪里运行,所以我不认为这是一个修复方案。
用于上下文
以下是我的默认Axios设置:
let headers = {
"Accept": "application/json",
"X-Requested-With": "XMLHttpRequest",
"Access-Control-Allow-Credentials": "true",
"Content-Type": "application/json; charset=utf-8",
"X-Requested-With": "XMLHttpRequest",
"SameSite": "None",
};
axios.defaults.withCredentials = true;
const api = axios.create({
baseURL: "http://127.0.0.1:8000/api/",
headers,
});
更新
Taylor奥特韦尔实际上是在我在Twitter上提到他之后才提出这个问题的,这是一个很长的线程,很多人提供了帮助,在与另一位Twitter用户进行Anydesk会话后,我们得出结论,这可能是一个服务器问题,因为即使使用实时API,在开发设置中,一切似乎都运行良好,我将尝试其他部署选项,看看哪些有效,并根据需要进行更新。
最后更新
已经过了3天又2天了,我的交货期限,原来一切都很完美,我的手机是因为我还不知道的原因搞砸了。我决定在Appetize平台上运行该应用程序,它的表现完美无瑕。感谢所有在这个紧急时刻帮助我的人。和平。
1条答案
按热度按时间gpnt7bae1#
您的cors.php配置文件应该如下所示:
在kernel.php文件中删除
\Illuminate\Http\Middleware\HandleCors::class,
并使用\Fruitcake\Cors\HandleCors::class,
将此
"fruitcake/laravel-cors": "^2.0",
添加到composer.json文件中,然后运行composer install
然后,删除Axios上的一些头对象,并允许Axios为您设置它们,除非您想自定义它们。例如:
确保在完成所有这些操作后重新启动laravel本地服务器。