laravel 5.6-具有Laravel API的vuejs SPA

时间:2018-11-29 03:28:46

标签: php laravel vue.js

我正在使用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:8080vuejs。 我怀疑这是因为我post时错过了标题,但是我不确定在这种情况下该如何做。

更新1

按照@phil的建议,我将localhost:8080添加到$allowedOrigins就像这样:

$allowedOrigins = ['http://myroute.xyz', 'http://clarkconcepts.net','http://localhost','http://localhost:8080'];

现在看来我可以摆脱印前检查的问题,但是会出现新的错误: enter image description here

找到了一些Google,这似乎是CSRF令牌问题。我现在感到困惑,因为我无法使用CSRF令牌,所以这就是Cors中间件的所有麻烦。

无论如何,有没有办法解决这个问题?或如何将laravel中的CSRF令牌添加到vuejs SPA网站中?

0 个答案:

没有答案