需要:分離前と後の状態の下端、ログイン失敗(トークン期限切れ)、フロントエンドは、次のステップは、ログインページにジャンプしたり、refresh_tokenリフレッシュトークンを使用することです知っている必要があります。
これは、(有効期限が切れていないrefresh_token)バックエンドのトークンを必要とすると、次の工程のためにフロントにリフレッシュすることができるかどうかに応じて、異なる識別するために戻ります。
具体的には、以下:
図1は、各成功した着陸クエリ後の新たなRefreshTokenミドルウェアは、トークンID(IDにより対応するトークンを取得することができないログイン失敗)との間の対応関係を保存します
<?PHPの 名前空間のApp \のHttp \ミドルウェア。 使用閉鎖を。 使用認証を。 使用を照らし\サポート\ファサード\ DBを。 クラスRefreshToken { / * * * @paramの$リクエスト * @paramクロージャ$次 * @return混合 * / パブリック 関数ハンドル($要求、閉鎖$次) { $トークン = $要求 - > ヘッダ( '許可' )。 $持っている = DB ::テーブル( 'oauth_refresh_tokens_ids') - >( 'access_tokenは'、$トークン) - >値( 'access_token_id' )。 もし(!$有する){ DB ::テーブル( 'oauth_refresh_tokens_ids') - >([=> 'access_tokenは'挿入$トークン - >トークン() - > 'access_token_id' =>認証::ユーザー()ID]) ; } を返す $次($要求)。 } }
図2は、ファイルアロケーションkerne.phpは、重要な中間体であるRefreshToken
保護 $ routeMiddleware = [ 'AUTH' =>アプリケーション\ \のHttpミドルウェア\認証\ :: クラス、 'リフレッシュ' =>ミドルウェア\ RefreshToken \アプリケーション\のHttp \ :: クラス、// 刷新トークン ]。
ミドルウェアRefreshTokenによる経路3、
4、ジャンプ方法は、認証ミドルウェアログイン失敗redirectToを書き換えた後、
保護された 関数 redirectTo($要求) { $トークン = $ _SERVER [ 'HTTP_AUTHORIZATION' ]。 $ accessTokenId = DB ::テーブル( 'oauth_refresh_tokens_ids') - >( 'access_tokenは'、$トークン) - >値( 'access_token_id' )。 $ RefreshTokensExpiresAt = DB ::テーブル( 'oauth_refresh_tokens') - >( 'access_token_id'、$ accessTokenId) - >値( 'expires_at' )。 もし(のstrtotime($ RefreshTokensExpiresAt)> ルート( 'ログイン'、[ 'コード' => 402 ])。 } 他{ 戻り経路( 'ログイン'、[ 'コード' => 401 ])。 } }
5、新しいルート
ルート::( 'ログイン/ {コード}'、取得関数($コード){ 戻り応答() - > JSON([ 'コード' => $コード、 'MSG' => 'ログイン・タイムアウトを' ]); } ) - >名前( 'ログイン');
実装:
1、ログインタイムアウトがrefresh_tokenを満了していない返します
{ "コード": "402"、 "MSG": "ログインタイムアウト" }
ログインタイムアウトがrefresh_tokenの有効期限が切れた後、2は、返さ
{ "コード": "401"、 "MSG": "ログインタイムアウト" }
注:表中のデータが、トークンrefresh_token作成時間と有効期限を保存しますが、時間枠は、テーブルからデータ値を検証しますが、直接アウトトークンによって計算され、そのセキュリティは本当に高いと言って持っていませんでした。そのため、更新が可能なログインのための方法トークンの有効期限を変更することによって、私たちは、トークン更新する必要があります。
楽しめ !