react-native - CORS 请求错误(反应原生 / laravel 护照)
问题描述
我创建了一个使用后端 API 的移动应用程序。我在 JS 端使用 fetch api 来发出我的请求。但是,我收到 CORS 错误
Error message: Access to fetch at 'mydomain.com' from origin 'null' 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. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
我尝试了以下方法:
A/ 在我的 .htaccess 中
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]]
<FilesMatch ".(ttf|otf|eot|woff)$">
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "GET,POST,OPTIONS,DELETE,PUT"
Header set Access-Control-Allow-Headers "Content-Type, Authorization, X-Requested-With, token"
Header set Access-Control-Allow-Credentials "true"
</IfModule>
这至少可以让我的 GET 请求通过。
B/ 在我的 index.php 中
header("Access-Control-Allow-Origin: *")
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Max-Age: 1000");
header("Access-Control-Allow-Headers: X-Requested-With, Content-Type, Origin, Cache-Control, Pragma, Authorization, Accept, Accept-Encoding");
header("Access-Control-Allow-Methods: PUT, POST, GET, OPTIONS, DELETE");
与 .htaccess 的效果相同,只有 GET 请求通过,带有 OPTIONS 。我还看到我的 Access-Control-Allow-Origin 将是“*,null”,我会收到一条错误消息,指出只允许一个。
C. https://github.com/barryvdh/laravel-cors 在 AuthServiceProvider 中,我尝试了这两个。一次只有一个,而不是同时。
Route::group([ 'middleware' => 'cors'], function() {
Passport::routes();
});
Passport::routes(null, ['middleware' => [ \Barryvdh\Cors\HandleCors::class ]]);
D. 使用此代码创建了一个自定义中间件
public function handle($request, Closure $next)
{
return $next($request)
->header('Access-Control-Allow-Origin', '*')
->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
}
我转储了我的 $_SERVER,但找不到 HTTP_ORIGIN、HTTP_REFERER。我确实得到了我的 HTTP_REMOTE_ADDR
更令人沮丧的是我的应用程序运行正常,而我只是突然开始遇到问题(后端托管在 bluehost 上)
编辑:样品请求
var data = new FormData();
data.append('grant_type', 'password');
data.append('client_id', '2');
data.append('client_secret', 'secret_token');
data.append('scope', '*');
data.append('username', 'mail');
data.append('password', 'pwd');
var link = (mydomain in https) + '/oauth/token';
fetch(link, config)
.then((response) => response.json())
.then((responseJson) => {
console.log(responseJson);
})
.catch(err => {
console.log(err);
})
解决方案
很奇怪,但我遇到的问题是我的 fetch 配置
最初的一个:
const config = {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'multipart/form-data;',
'Authorization': 'Bearer ' + global.token,
},
body: data,
}
修正过的
const config = {
method: 'POST',
headers: {
'Accept': 'application/json',
//'Content-Type': 'multipart/form-data;',
'Authorization': 'Bearer ' + global.token,
},
body: data,
}
我刚刚删除了 'Content-Type': 'multipart/form-data;',
推荐阅读
- php - PHP 使用 READFILE 但唯一的页面标题导入 HEAD 内容
- javascript - 如何在拦截器响应中使用挂钩导航?
- redis - 是否有 redis pub/sub 替换选项,具有高可用性和冗余,或者可能是 p2p 消息传递?
- python - 获取错误:“Int64Index”对象没有属性“get_values”。我究竟做错了什么?
- python - 使用 H20 AI 时从排行榜功能获取准确度指标
- wamp - WAMP 3.2 托盘图标为绿色,一切正常,除了左/右键单击它时没有任何反应?
- sql-server - 尝试从 VBA 到 SQL Server 运行动态生成的更新查询时出现“缺少对象或列名”
- elixir - 如何让 Elixir/Phoenix LiveComponent 向其自身而不是其父级发送消息?
- ms-access - 将txt文件导入ms访问m:m表
- c++ - 读取具有不同数据类型的多个传感器