2016-12-19 125 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請求。