我正在使用laravel 5.6
设置此Web应用程序。而且我有一种情况,我需要创建另一个文件夹来独立于vuejs
开发laravel
SPA。所以现在我有:
laravel
将api服务到get/post
到数据库:
- www.example.com/sample_api/{id}
- www.example.com/sample_api2/
...
并使用cors
中间件设置:
<?php
namespace App\Http\Middleware;
use Closure;
class Cors
{
public function handle($request, Closure $next)
{
$allowedOrigins = ['http://myroute.xyz', 'http://clarkconcepts.net','http://localhost'];
$origin = isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN'] : '';
if (in_array($origin, $allowedOrigins)) {
return $next($request)
->header('Access-Control-Allow-Origin', $origin)
->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS')
->header('Access-Control-Allow-Headers',' Origin, Content-Type, Accept, Authorization, X-Request-With, cache-control,postman-token, token')
->header('Access-Control-Allow-Credentials',' true');
}
return $next($request);
}
}
我可以通过get
api laravel
,但不能post
。
当我post
经过api
时,我总是会得到这个:
从源访问“ http://localhost:8000/posttest”处的XMLHttpRequest “ http://localhost:8080”已被CORS政策屏蔽:对 预检请求未通过访问控制检查:否 请求中存在“ Access-Control-Allow-Origin”标头 资源。
其中localhost:8000
是laravel服务器,而localhost:8080
是vuejs
。
我怀疑这是因为我post
时错过了标题,但是我不确定在这种情况下该如何做。
更新1
按照@phil的建议,我将localhost:8080
添加到$allowedOrigins
就像这样:
$allowedOrigins = ['http://myroute.xyz', 'http://clarkconcepts.net','http://localhost','http://localhost:8080'];
找到了一些Google,这似乎是CSRF令牌问题。我现在感到困惑,因为我无法使用CSRF令牌,所以这就是Cors
中间件的所有麻烦。
无论如何,有没有办法解决这个问题?或如何将laravel
中的CSRF令牌添加到vuejs
SPA网站中?