2016-12-19 92 views
1

我已经看过一些topicsAngular2和Laravel CSRF保护

我遇到的问题是在于这段代码

<meta property="csrf-token" name="csrf-token" content="{{ csrf_token() }}"> 

我使用Angular2为核心引擎,它发送AJAX请求到Laravel API和我没有使用刀模板 - 只是.html files,所以我不能从HTML文件

所以调用PHP函数csrf_token(),我通过延长我的 添加一个临时解决方案/var/www/pandacrm/app/Http/Middleware/VerifyCsrfToken.php文件

public function handle($request, Closure $next) 
{ 
    if (! $request->is('api/*')) 
    { 
     return parent::handle($request, $next); 
    } 

    return $next($request); 
} 

但似乎不是解决的最好办法,有没有其他的解决方案来解决这个问题?

+0

您可以禁用CSRF中间件(不推荐)或提供CSRF中间件从您的视图有效令牌。在没有某种跨站点请求伪造保护的情况下发出Ajax请求是非常危险的事情。 – Joe

回答

2

您可以通过在HTML文件中使用JavaScript创建一个meta标签与csrf-token

如何做到这一点:

发送一个Ajax请求Laravel途径获得令牌。 (在控制器动作中返回csrf-token)然后在您的html文件中使用该标记创建一个元标记。

但在此之前,你必须是特定的航线上禁用CSRF保护。 有一个办法做到这一点here为laravel5和here 5.3。

现在你有一个csrf meta标签,可用于其他Ajax请求。