web-dev-qa-db-ja.com

Laravelルートが直接アクセスされないようにする方法(つまり、ajax以外のリクエスト)

私のプロジェクトでは、Laravelを純粋にバックエンドAPIとして使用しており、すべてのフロントエンドはAngular javascript。現時点では、Laravelルートに直接アクセスでき、ブラウザに表示されるJsonのすべてのデータが出力されます。制限を設定して、Laravel Ajaxリクエストにのみ応答するようにします。何もありません。

私はこの投稿を読みました ここ これはLaravel 4の解決策があり、それはfilter.phpに制限を追加することです。しかしLaravel 5.1、フィルターは使用されなくなり、ミドルウェアを使用して同じことができると思います。ただし、Laravel 4ソリューションを変更する方法がわかりません= SOフィルターからミドルウェアへの回答。

誰かがLaravel 5.1ルートに直接アクセスされないようにする方法についてあなたのアイデアを共有できますか?

filter.phpを使用したLaravel4ソリューション:filter.phpで次のフィルターを宣言します。

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

次に、AJAX経由でのみアクセスしたいすべてのルートをグループに入れます。routes.php内:

Route::group(array('before' => 'isAJAX'), function()
{
    Route::get('contacts/{name}', ContactController@index); // Or however you declared your route

    ... // More routes
});
14
Neel

次の内容でミドルウェアファイル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: routes/web.php

// Single route
Route::any('foo', 'FooController@doSomething')->middleware('ajax');

// Route group
Route::middleware(['ajax'])->group(function () {
    // ...
});
42
Javi Stolz