php - 角/Laravel CORS
问题描述
我正在创建一个 Laravel/Angular 应用程序,并尝试将两者连接起来以实现我的登录实现。
当我登录时,我从网络选项卡中获得 200 ok 响应代码。在控制台中,我得到以下信息。
从源“ http://localhost:4200 ”访问“ http://127.0.0.1:8000/api/auth/login ”的 XMLHttpRequest已被 CORS 策略阻止:Access 不允许请求标头字段内容类型预检响应中的 -Control-Allow-Headers。login.component.ts:26
HttpErrorResponse {headers: HttpHeaders, status: 0, statusText: "Unknown Error", url: " http://127.0.0.1:8000/api/auth/login ", ok: false, …}
我创建了一个名为 Cors.php 的中间件
public function handle($request, Closure $next)
{
return $next($request)
->header('Access-Control-Allow-Origin', '*')
->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
}
这是像这样在我的内核中注册的
protected $middleware = [
\App\Http\Middleware\Cors::class,
];
protected $routeMiddleware = [
'cors' => \App\Http\Middleware\Cors::class,
];
它也像这样在我的 api.php 路由文件中调用
Route::group([
'middleware' => ['api', 'cors'],
'prefix' => 'auth'
], function ($router) {
Route::post('login', 'API\AuthController@login');
Route::post('logout', 'API\AuthController@logout');
Route::post('refresh', 'API\AuthController@refresh');
Route::post('me', 'API\AuthController@me');
});
关于发生了什么的任何想法。
解决方案
添加Cors
中间件以$middlewares
在您的应用程序中全局应用中间件,因此无需通过api.php
.
另外,你错过了->header('Access-Control-Allow-Headers');
Access-Control-Allow-Headers 响应标头用于响应包含 Access-Control-Request-Headers 的预检请求,以指示在实际请求期间可以使用哪些 HTTP 标头。
推荐阅读
- angular - 带纱线的 Angular CLI
- python - 带有“一般”异常消息的条件 `try` 语句
- docker - 在 Gitlab CI 上找不到 Docker 主机名
- reactjs - 当 React 使用 Canvas 时 - 绘图
- javascript - Thymeleaf:在控制器中为数据表定义 URL
- java - 让一个整数转到不同的行
- postgresql - postgres 使用 linux 命令从完整路径复制路径
- lisp - lisp - 错误:没有函数定义:BUTLAST
- django - 错误:未能将一些引用推送到“https://git.heroku.com/xxxxxxxxx.git”
- php - 在产品页面中使用 Prestashop 模块 tpl 变量