私はLaravelとJWT-authを初めて使いました。私はJWTトークンを生成し、バックエンドで関連ユーザを取得するプロセスを実装しましたが、クライアント側に格納されたトークンからサーバがユーザの認証をどのように検証するかはまだ分かりません。Laravel/LumenはJWTを介してユーザーの認証をどのように検証しますか?
マシンAにログインしてマシンBのパスワードを変更した場合でも、以前のトークンでマシンAからログインできますか?
私はLaravelとJWT-authを初めて使いました。私はJWTトークンを生成し、バックエンドで関連ユーザを取得するプロセスを実装しましたが、クライアント側に格納されたトークンからサーバがユーザの認証をどのように検証するかはまだ分かりません。Laravel/LumenはJWTを介してユーザーの認証をどのように検証しますか?
マシンAにログインしてマシンBのパスワードを変更した場合でも、以前のトークンでマシンAからログインできますか?
「ユーザー」テーブルと「セッション」のような一般的なテーブルがあります。ユーザーが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となります。トークンはパスワードに応じて設定されません。
。トークンはパスワードにリンクされるのではなく、ユーザーに直接リンクされるので、JWTプロバイダがパスワードの変更をどのように処理するかは自由です。 – apokryfos
@apokryfosご返信ありがとうございます。それは私には意味がある。 JWTプロバイダと言って、jwt-authプラグインまたはバックエンド開発者自身を意味しますか?とにかく、良い実装方法についてのヒントを教えてください。 – yifei3212
この場合、JWTプロバイダはアプリケーションですので、必要に応じてユーザがパスワードを変更するたびに、ユーザに関連付けられたすべてのトークンを無効にすることができます([Observers](https://laravel.com/docs/5.5)/eloquent#observers)はここで参考になります)。 – apokryfos