2017-09-22 14 views
0

私はLaravelとJWT-authを初めて使いました。私はJWTトークンを生成し、バックエンドで関連ユーザを取得するプロセスを実装しましたが、クライアント側に格納されたトークンからサーバがユーザの認証をどのように検証するかはまだ分かりません。Laravel/LumenはJWTを介してユーザーの認証をどのように検証しますか?

マシンAにログインしてマシンBのパスワードを変更した場合でも、以前のトークンでマシンAからログインできますか?

+0

。トークンはパスワードにリンクされるのではなく、ユーザーに直接リンクされるので、JWTプロバイダがパスワードの変更をどのように処理するかは自由です。 – apokryfos

+0

@apokryfosご返信ありがとうございます。それは私には意味がある。 JWTプロバイダと言って、jwt-authプラグインまたはバックエンド開発者自身を意味しますか?とにかく、良い実装方法についてのヒントを教えてください。 – yifei3212

+0

この場合、JWTプロバイダはアプリケーションですので、必要に応じてユーザがパスワードを変更するたびに、ユーザに関連付けられたすべてのトークンを無効にすることができます([Observers](https://laravel.com/docs/5.5)/eloquent#observers)はここで参考になります)。 – apokryfos

答えて

0

「ユーザー」テーブルと「セッション」のような一般的なテーブルがあります。ユーザーがAPI経由でログインを要求すると、「セッション」テーブルの新しい行が挿入され(トークンが保存されます)、APIはトークンをユーザーに返します。認証が必要なすべての要求に対して、ユーザーはこのトークンを(たとえばHTTPヘッダーを通じて)提供する必要があります。

要求でユーザーを認証する場合は、トークンが存在し、有効であるかどうかを確認してからユーザーを取得する必要があります。ルーメンでの例:

$this->app['auth']->viaRequest('api', function ($request) { 
    $session = Session::where(['token' => $request->header('token')])->get(); //user gives his token in the header request 
    if($session){ 
     return $session->user(); //you have setup the hasOne/hasMany relationship between sessions and users 
     //the user is authenticated 
    } 
    return null; 
    // the user is not authenticated 
}); 

「私はマシンAにログインして、マシンB上で自分のパスワードを変更した場合、私はまだ前のトークンでマシンAからログインできますか?」 トークンがまだ有効で、複数のアクティブなセッションを許可している場合はyesとなります。トークンはパスワードに応じて設定されません。

関連する問題