6

私のプロジェクトでは、Laravelを純粋にバックエンドAPIとして使用しています。すべてのフロントエンドはAngular javascriptで処理されます。現時点では、Laravelのルートに直接アクセスすることができ、ブラウザに表示されているJsonのすべてのデータを読み出すことができます。私はLaravelがAjaxリクエストにのみ応答するように制限を設けたい。Laravelルートに直接アクセスするのを防ぐ方法(つまり、非アヤックスリクエスト)

私はfilter.phpに制限を追加することで、Laravel 4の解決策を持つhereを読んでいます。しかし、Laravel 5.1以降、フィルタはもはや使用されておらず、ミドルウェアを使用して同じことを行うことができると私は信じています。ただし、フィルタからミドルウェアへの答えがLaravel 4のソリューションを変更するにはどうすればよいかわかりません。

Laravel 5.1ルートの直接アクセスを防止する方法について、あなたのアイデアを共有することはできますか? filter.phpを使用して

Laravel 4溶液:filter.php宣言で このフィルタ:

Route::filter('isAJAX', function() 
{ 
    if (!Request::AJAX()) return Redirect::to('/')->with(array('route' => Request::path())); 
}); 

次に、あなただけのグループにAJAX経由でアクセスするすべてのあなたのルートを置きます。あなたのroutes.phpで:

​​

答えて

18

は、このコンテンツをミドルウェアファイルapp/Http/Middleware/OnlyAjax.phpを作成します。

<?php namespace App\Http\Middleware; 

class OnlyAjax 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, \Closure $next) 
    { 
     if (! $request->ajax()) 
      return response('Forbidden.', 403); 

     return $next($request); 
    } 
} 

は、次にファイルにapp/Http/Kernel.php

<?php namespace App\Http; 

use Illuminate\Foundation\Http\Kernel as HttpKernel; 

class Kernel extends HttpKernel 
{ 
    /** 
    * The application's global HTTP middleware stack. 
    * 
    * @var array 
    */ 
    protected $middleware = [ 
     //... your original code 
    ]; 

    /** 
    * The application's route middleware. 
    * 
    * @var array 
    */ 
    protected $routeMiddleware = [ 
     //... your original code 
     'ajax' => \App\Http\Middleware\OnlyAjax::class, 
    ]; 
} 

をあなたのミドルウェアを登録し、最終的にミドルウェアを添付しますあなたがAJAX経由でのみアクセスできるようにするルート。すなわち:

// File: app/Http/routes.php 
post('search/{model}', ['as' => 'search', 'middleware' => 'ajax', 'uses' => '[email protected]']); 
+0

これは素晴らしいです!正確に私が必要なもの。あまりにもありがとう@JaviStolzこれは私が長い間このことに固執して以来、これは大きな助けとなっています。 Vハッピー:)私は今それを試してみましょう。 – Neel

+1

これは、HTTPリクエストに 'X-Requested-With:XMLHttpRequest' HTTPヘッダを手動で追加することなく、簡単に回避できます。 – Epoc

+0

もう一つは、isAjaxミドルウェアと一緒に特定のドメインからのリクエストのみを許可するためにcorsフィルタを使用することです。 –

関連する問題