2016-12-20 22 views

答えて

0

この解決策はlaravel 5.0に適しています最初に2つのミドルウェアをapp/http/kernel.phpに定義する必要があります。最初のミドルウェアは少なくなります。

<?php 
Route::group(['middleware' => ['lesssession']], function() 
{ 
    Route::get('download', function(){ 
     // do some stuff for download file 
    }); 
}); 
Route::group(['middleware' => ['hassession']], function() 
{ 
    // all other route that need session 
}); 

?> 
:編集 app/http/route.phpことにより、2つのグループの プットルート:

<?php namespace App\Http; 

use Illuminate\Foundation\Http\Kernel as HttpKernel; 

class Kernel extends HttpKernel { 

    /** 
    * The application's global HTTP middleware stack. 
    * 
    * @var array 
    */ 
    /** 
    * The application's route middleware. 
    * 
    * @var array 
    */ 

    protected $routeMiddleware = [ 
     'auth' => 'App\Http\Middleware\Authenticate', 
     'hassession' => [ 
      'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode', 
      'Illuminate\Cookie\Middleware\EncryptCookies', 
      'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse', 
      'Illuminate\Session\Middleware\StartSession', 
      'Illuminate\View\Middleware\ShareErrorsFromSession', 
      'App\Http\Middleware\VerifyCsrfToken', 
     ], 
     'lesssession' => [] , 
     'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth', 
     'guest' => 'App\Http\Middleware\RedirectIfAuthenticated', 
    ]; 

} 

ステップ2:lesssessionがあるセッション.AND秒を必要としないルートであるhasssessionミドルウェア.hassessionは、セッション必要なルートのために良いです

1

セッションレスアクセス用の新しいルート/ミドルウェアタイプを作成します。これを行うには、StartSessionミドルウェアが含まれていないHttp/Kernelに新しいミドルウェアグループを追加し、新しいルートファイルを追加してすべてのダウンロードリンクを保持し、新しいルートファイルをRouteServiceProviderに登録します。

app/Http/Kernel.php$middlewareGroups配列は、以下のように見えるように編集:

Route::group([ 
    'middleware' => 'sessionless', 
    'namespace' => $this->namespace, 
    'prefix' => 'download', 
], function ($router) { 
    require base_path('routes/downloads.php'); 
}); 

今すぐあなたの/routesにファイルを追加します。

protected $middlewareGroups = [ 
    'web' => [ 
     \App\Http\Middleware\EncryptCookies::class, 
     \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, 
     \Illuminate\Session\Middleware\StartSession::class, 
     \Illuminate\View\Middleware\ShareErrorsFromSession::class, 
     \App\Http\Middleware\VerifyCsrfToken::class, 
     \Illuminate\Routing\Middleware\SubstituteBindings::class, 
    ], 

    'api' => [ 
     'throttle:60,1', 
     'bindings', 
    ], 

    'sessionless' => [ 
     \App\Http\Middleware\EncryptCookies::class, 
     \Illuminate\Routing\Middleware\SubstituteBindings::class, 
    ], 

]; 

は、その後新たに作成したルートファイルをマップするために、あなたのapp/Providers/RouteServiceProviderを編集しますディレクトリdownloads.phpをダウンロードし、そこにダウンロード可能なルートを追加します。あなたは彼らが探しているものをファイル解析するために、ワイルドカードを使用する場合は、次のことができ、または明示的ルートがダウンロードをトリガする一覧表示することができます:

Route::get('test', function(){ 
    $file = '/path/to/test/file'; 
    return response()->download($file); 
}); 

Route::get('{fileName}', function($fileName){ 
    $file = '/path/to/' . $fileName; 
    return response()->download($file); 
}); 

これはヘッドレス認証を使用して対処していない、これを使用sessionlessルートのすべてに不正にアクセスすることを望まない場合は必要です。

+0

あなたの答えはより柔軟で正確です。セッションレスの複数のルートが可能です。ありがとうございます。 – Froxz

+0

これはlaravel 5.0またはlaravel 5.3用ですか? – adib16

+0

構造はどちらの場合でも動作しますが、 'routes /'の代わりに 'app/Http/routes'にダウンロードルートファイルを置いておきたいと思っています。 –

関連する問題