2017-10-17 14 views
0

ラーベル55で、私は認証システムとパスポートをインストールしました。私のVueコンポーネントは、api:authミドルウェア(Kernel.phpのCreateFreshApiTokenを使用)で保護されたapiにリクエストできます。Laravel 55 - Passport&Vue - auth/login/logout

axiosを使用するときに、/ APIに要求を行う場合は/それはapi.phpのセットアップを経由して正しく

を対応させていただきますと、私は/アプリはWeb経由で応答しますmyrouteへの要求を行う場合myroute。 PHPの設定

SPA Appの場合、セッションがタイムアウトするとアプリトークンを更新することができます。

標準のログインページを使用してアプリケーションにログインし、データベース内のWebセッションを終了すると、/ api/myrouteへのaxiosリクエストは引き続き有効です。

セッションの終了(401レスポンス)をシミュレートするには、/ logout(web.php経由)へのAxiosリクエストを行う必要があります。

これは私が迷子になってしまったことです。私は、強制ログアウトやセッションの終了をシミュレートしたいと思います。

SPAアプリの完全なストーリー(ログイン、ログアウト、登録、取り消し、リフレッシュ)を再作成する必要がないように、パスポート認証をAPIと標準認証ルートにどのように組み合わせることができますか?

+0

を、Laravelは自動的にトークンを処理する必要がありますあなたのために。あなたは、セッションがアクティブであるかどうかを定義する別のメカニズムがアプリケーションに存在すると言っているようです。その場合、ミドルウェアで関連するチェックを実行するだけで済みます。 –

+0

さて、私はそうすることを嬉しく思っていますが、ベンダーのファイルをどのように変更していませんか? 私のaxiosのリクエストのそれぞれはbootstrap.js経由でこれを持っています: window.axios = require( 'axios'); window.axios.defaults.headers.common ['X-Requested-With'] = 'XMLHttpRequest'; let token = document.head.querySelector( 'meta [name = "csrf-token"]'); if(token) window.axios.defaults.headers.common ['X-CSRF-TOKEN'] = token.content; リモートから(管理者のように)ユーザーを切断するとウェブ部分をブロックすることができますがトークンは存続し続けますので、Axios経由の各xhttprequestはユーザーにlaravelアプリケーションと対話させます – user3700150

答えて

0

あなたはそう、直接あなたのapiルート上のミドルウェアを置くことができます。

php artisan make:middleware UserLoggedIn

その後、そのミドルウェアであなたのようなものだろう:明らかhasActiveSession方法は、必要があるでしょう

public function handle($request, Closure $next) 
{ 
    $user = Auth::user(); 
    if(!$user->hasActiveSession()){ 
     // User has been logged out, return a 401 
     return response('Not Authorized', 401); 
    } 


    return $next($request); 
} 

Userモデルに配置し、ユーザーセッションがアクティブであることを確認するために必要なチェックを行います。

はその後Kernel.php$routeMiddlewareに次の行を追加します。

protected $routeMiddleware = [ 
    // ...other route middleware... 
    'user.loggedIn' => UserLoggedIn::class 
]; 

その後、あなたのAPIのルート上にあなたがミドルウェアを追加することができます: `CreateFreshApiToken`ミドルウェアで

Route::middleware(['auth:api','user.loggedIn'])->get('/myRoute','[email protected]') 
+0

あなたは正しいと思います。それを試してみましょう。自分のミドルウェアを使用するという概念を理解しています。これは "ガード"の役割ではなく、なぜこれがCreateFreshApiTokenによって直接オンボードになっていないのでしょうか? 最後に、危険なのは、ログインした後に生成されたlarval_token Cookieを "ブラックリストに登録"できないということです。 さらに、「接続されたユーザー」を切断できるのは、管理者用のコントローラを作成する方法ですか? – user3700150

+0

これらのトークンはユーザー側にしか存在しないように見えるので、ログアウト方法を起動するためのメカニズムが必要です。私はそれを行う最もクリーンな方法は、adminによって切断されたときにあなたのログアウト方法を呼び出すメッセージを[ブロードキャスト](https://laravel.com/docs/5.5/broadcasting)することだと思う(Laravelは[プッシャー] https://pusher.com)を使用すると、ユーザーは即座にログアウトされたことを知ることができます。 –

+0

よく知られています – user3700150