Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 飞行前标题不符合预期_Php_Angular_Laravel_Cors_Preflight - Fatal编程技术网

Php 飞行前标题不符合预期

Php 飞行前标题不符合预期,php,angular,laravel,cors,preflight,Php,Angular,Laravel,Cors,Preflight,我正在尝试从Angular 8应用程序向Laravel 5.8 Passport API发送请求,但没有成功。我的意思是,只有有限的成功。当我将Angular请求中的withCredientials设置为true时,飞行前标头尝试查看API是否会返回正确的标头,包括Access Control Allow Credentials:true,但响应显示没有此类标头,即使我将其设置为后端 如果我没有设置凭据,响应头将包括访问控制允许凭据:true,正如预期的那样,但我也需要在飞行前响应中使用该响应

我正在尝试从Angular 8应用程序向Laravel 5.8 Passport API发送请求,但没有成功。我的意思是,只有有限的成功。当我将Angular请求中的withCredientials设置为true时,飞行前标头尝试查看API是否会返回正确的标头,包括Access Control Allow Credentials:true,但响应显示没有此类标头,即使我将其设置为后端

如果我没有设置凭据,响应头将包括访问控制允许凭据:true,正如预期的那样,但我也需要在飞行前响应中使用该响应

我曾尝试将飞行前请求案例封装在单独的块中,使用

if(!$\u服务器['REQUEST\u METHOD']=='OPTIONS')
并显式设置头响应,但也没有成功。 另一个注意事项是,从邮递员那里请求相同的URL正如预期的那样有效(因为邮递员不会干扰CORS)

正在从以下代码段激发请求:

    await this.http.post(this.logInEndPoint, credentials, {
        headers: this.httpHeaders,
        withCredentials: true
    }).subscribe(async res => {
    ...
CORS中间件如下所示:

$res->headers->set('Content-Type','application/json');
$res->headers->set('Access-Control-Allow-Origin','http://127.0.0.1:4200');
$res->headers->set('Access-Control-Allow-Credentials','true');
$res->headers->set('Access-Control-Max-Age','60');
$res->headers->set('Access-Control-Allow-headers','x-requested-with,Content-Type,origin,authorization,accept,client-security-token');
$res->headers->set('Access-Control-Allow-Methods','GET,POST,PUT,DELETE,OPTIONS');
如果(!$\u服务器['REQUEST\u METHOD']='OPTIONS'){
$next($res);
}否则{
返回$res;
}
这就是我定义CORS中间件使用的地方 api.php

Route::middleware('web','json.response','cors')->group(function(){
路由::post('login','AuthController@login');
...

我希望“成功登录”消息,但从源“”获得对“”处XMLHttpRequest的访问权已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:响应中“访问控制允许凭据”标头的值为“”,当请求的凭据模式为“包括”时,该值必须为“真”。凭据模式为reqXMLHttpRequest启动的uests由withCredentials属性控制。在开发者工具中。

经过几天的努力,我终于解决了这个问题。 如果我必须总结与Laravel API相关的大多数问题,我会指出后端的头设置。对我来说,它在自定义CORS中间件中的某个地方。
老实说,我不确定上面的配置到底出了什么问题(我猜是在Allow Methods标题中),但我想与大家分享一下我是如何解决这个问题的。
首先,我删除了我制作的所有定制中间件。我开始使用该中间件,仅为API的组添加它。在那里,我更改了默认配置。我将allowOrigins设置为Angular服务器URI,并将allowedMethods设置为我期望使用的请求。发布CORS配置文件后,我确保在上运行我的Angular应用程序127.0.0.1(不在本地主机上)。与我在Laravel服务器上所做的相同。
在同一个IP地址上运行两个应用程序并使用新的CORS中间件后,一切都顺利运行,没有问题