2017-09-26 3 views
4

under-constructionというパッケージをビルドします。このパッケージがコンフィグ ファイルで有効化されていると、そのサイトは適切なコードを持つ人だけが アプリケーションにアクセスできるようになります。Laravelパッケージセッション変数がajax呼び出しで保存されない

https://github.com/larsjanssen6/underconstruction

私が今持っている問題:

コードが入力されると、私はのに(チェックと呼ばれる)は、このコントローラメソッドを打つAJAX呼び出しを行います。

https://github.com/larsjanssen6/underconstruction/blob/master/src/Controllers/CodeController.php

コードが正しければ、セッション変数が設定されている:

session(['can_visit' => true]); 

その後、私のvue.js私は/にリダイレクトコードで。そしてそれは私のミドルウェアを再び打つでしょう。ここでは、can_visitというセッションが存在するかどうかを確認します。

return session()->has('can_visit'); 

https://github.com/larsjanssen6/underconstruction/blob/master/src/UnderConstruction.php

しかし、セッション変数can_visit常に消えました!そんなことがあるものか?

お時間をいただきありがとうございます。

+1

ミドルウェア「web」が呼び出されているかどうかを確認します。セッションを初期化するミドルウェア –

+0

はい、ルートはweb.phpにあり、Webミドルウェアを使用します。 – Jenssen

答えて

2

セッションミドルウェアをロードしていないため、セッションは開始されず、値は保持されません。

としては、あなたの保護されたルート(/)は、ウェブミドルウェア内にあるにもかかわらず、コメントで述べた(セッションを読んで)、お使いのサービスプロバイダのルート(/under/construction/under/check)は(何も書き込みセッション)ではありませんませんでした。

単純な修正は、セッションを追加することです。それ以上の場合、Webミドルウェア全体を追加することもできます。

$routeConfig = [ 
    'namespace' => 'LarsJanssen\UnderConstruction\Controllers', 
    'prefix' => 'under', 
    'middleware' => [ 
     'web', // add this 
     // DebugbarEnabled::class, // leaving this dead code behind despite vcs 
    ], 
]; 

ただし、ユーザーがミドルウェアをWebミドルウェアグループに追加すると、無限のリダイレクトループですぐに問題に陥る可能性があります。だから私はあなたが既存のunderconstructionルートの1つにいないことを確認するためにいくつかの種類のチェックを追加します。

public function handle($request, Closure $next) 
{ 
    // check this isn't one of our routes 
    // too bad router hasn't loaded named routes at this stage in pipeline yet :(
    // let's hope it doesn't conflict with user's routes 
    if ($request->is('under/*')) { 
     return $next($request); 
    } 

    if (! $this->config['enabled']) { 
     return $next($request); 
    } 

    if (!$this->hasAccess($request)) { 
     return new RedirectResponse('/under/construction'); 
    } 

    return $next($request); 
} 

、最終的には、このプロジェクトの文脈から推測、私は期待したいほとんどの人は、世界的なミドルウェアでこれを固執したいと思います。しかし、グローバルミドルウェアでは実行されないため、同じセッションを開始する必要はありませんが、それでも問題は発生します。だからもっと噛み付くことがあります。ハッピーコーディング!

+0

お世話になりました。心から感謝する!最後に、多くの研究をした後に解決策があります。 – Jenssen

関連する問題