AngularJS和Laravel CORS,POST在预检选项后停止
AngularJS & Laravel CORS, POST stops after preflights OPTIONS
这是一只鸟的故事,他想为这个职位工作,但在飞行前测试中失败了......
使用 Laravel 构建的应用程序被用作 RESTful API 和 AngularJS/ionic。我的 API 调用工作正常,直到...由于未知原因,它停止了。虽然我为调用的 angularJS 端设置了 withCredentials,但预检选项没有发送 cookie,但我收到了来自 Laravel 的回复。我们如何禁用选项以返回 cookie laravel_session?它搞砸了 CORS,因为它设置了一个新会话,该会话在每个 POST 上显然会有所不同。对于Laravel方面,我使用来自@barryvdh的Laravel/CORS软件包,具有以下配置:
'*' => array(
'supportsCredentials' => true,
'allowedOrigins' => array('*'),
'allowedHeaders' => array('*'),
'allowedMethods' => array('POST', 'PUT', 'GET', 'PATCH', 'OPTIONS', 'DELETE'),
'maxAge' => 36000,
'hosts' => array('api.*'),
)
在角度方面,我有以下内容:
$http({
method: 'POST',
url: 'http://api.blabla.local/banana',
data: data,
withCredentials: true
})
我的GET调用工作正常,我在应用程序启动时运行了一个,以从laravel获取CSRF,并在需要时发回。
现在发生以下情况:
1. 预检选项>请求没有会话的 cookie。响应 = 200,使用不同的会话 cookie,这将导致 CSRF 一直导致。[想法:withCredentials不适用于OPTIONS调用]
2. POST> 失败并显示 500,在标题中我没有看到任何响应,但它确实发送了 cookie/会话 [想法:凭据被传递给它,但它们也是错误的,因为它们在服务器端由于预检选项而发生了变化]。错误消息指出它不是授权来源。
这是怎么回事?我已经尝试了几个小时,并检查了很多其他帖子,但似乎没有任何帮助!我可以摆脱预检吗,如何?还是问题出在其他地方(服务器端我正在使用 Laravel Homestead)?我觉得真正的问题是 OPTIONS 返回一个会话 cookie,或者只是请求确实包含一个!
感谢您的帮助,我已经卡了几个小时,我为此发疯了......
在过滤器中.php在 L4.2 下,我最终使用了这个:这个问题很旧,所以不确定这是我唯一做的事情,但看起来像:
App::before(function($request)
{
//
// Enable CORS
// In production, replace * with http://yourdomain.com
header("Access-Control-Allow-Origin: http://mydomain.local");
header('Access-Control-Allow-Credentials: true'); //optional
if (Request::getMethod() == "OPTIONS") {
// The client-side application can set only headers allowed in Access-Control-Allow-Headers
$headers = [
'Access-Control-Allow-Methods'=> 'GET, POST, PUT, DELETE',
'Access-Control-Allow-Headers'=> 'Content-Type'
];
return Response::make('You are connected to the API', 200, $headers);
}
});
App::after(function($request, $response)
{
//
});
JWT可能适用于离子和角度。
检查 http://packalyst.com/packages/package/tymon/jwt-auth也 https://www.youtube.com/watch?v=vIGZxeQUUFU
- 我的单元测试选项是什么
- 如何更改bigquery API中的计费层选项
- 使用Javascript获取所选选项ID
- Selectize.js:如何对整数值的选项进行排序
- 通过js在新选项卡中有条件地打开url
- 按照选项卡索引的顺序循环一个jQuery选择
- Ajax Live搜索发布到Laravel视图
- 如何在使用selectBoxIt JQuery插件时检测选项更改
- 无法在Ionic select中预先选择最后一个选项
- 如何在选项卡上定义属性'的主窗口对象
- 为什么grunt contrib connect的中间件选项的第三个参数是未定义的
- 使用此选项选择父类内部的类
- CKeditor:更改对话框中的默认选择选项
- JQuery覆盖不更改单选选项
- AngularJS和Laravel CORS,POST在预检选项后停止
- 当验证在 laravel 5 中返回 false 时,如何获取选项值的名称
- 如何根据laravel中选择的选项刷新页面
- 如何在laravel刀片的会话变量下拉菜单中设置所选选项
- “未定义的常量/变量”错误使用带有 Angular JS的 Laravel...无法在边栏选项卡中显示变量
- 通过ajax填充选择选项显示未定义——Laravel