ThinkPHP5会話はJWTを使用して検証しました

過去に先立ち、確認するために、クッキーやセッション管理の権限やログイン状況とは、フロントの分離およびdoneプロジェクトの後端、サーバーテンプレートをレンダリングされ、その後、アカウントはありません。その後、分離中VUEとアプレット、前後端に接触した後、あなたは保存許可認証およびログオンセッションを経験します。HTTPプロトコルが開いているので、あなたは空想を呼び出すことができます。だから、インタフェースは自由に呼び出すこともしたくない場合、あなたはアクセス制御を行う必要があり、ユーザ認証が良いですが、APIを呼び出すことが許可されています。

JWTの利点

1:サーバは、サーバのオーバーヘッドを減らす、何のクロスドメインの伝送の問題が存在しない、伝統的なセッション情報を保持する必要はありません。

2:シンプルな構造をJWT、輸送を容易にするため、数バイトを占有。

3:JSON形式の一般的な、あなたは異なる言語を使用することができます。

JWTは、3つの部分から構成されています。

ヘッダ(ヘッダ)、ペイロード(ペイロード)と定義情報は、カスタム情報ビザ(シグネチャ)を含有します

だからここトークンベアラにアクセスするために使用される、JWTである;定義:トークンと呼ばれ、サーバーへの信頼性の高い認証情報を提供するために、クライアントを必要とするユーザーの身元を確認するために、このトークンは通常、JSONデータ形式で構成されていますストリングのハッシュハッシュアルゴリズムを生成することにより、いわゆるJSONウェブトークン(トークンの元の値のJSON表現がデータ・フォーマットは、JSON、ウェブ表現は、インターネット上に展開され、トークンを表すトークンは、JWTをいいます。)

まず、GitHubのに使用composer require firebase/php-jwtする方法、作曲、私は疲れていない、私の過去の記事インストールのチュートリアル内の、firebase / PHP-JWTをダウンロードしてください。

インストールした後、我々は、コードの整合性をテストするための新しいユーザーコントロールを作成することができ、我々は最初の3つの制御方式を作成します

Base.phpという

Base.phpというベース・コントローラは、主に、要求を受け入れるたびに検証トークンを運ぶHTTPリクエストヘッダは、ヘッド内部要求トークンを置く方法、これはフロントエンドを実行するかどうかを検証するために使用されます。

<?phpの
/ ** 
 * PhpStormによって作成されます。
 *ユーザー:のび太の
 *日:2/15 
 *時間:14:55 
 * / 

名前空間のアプリ\ユーザー\コントローラ。

リクエスト\考えて使用します。
Firebase \ JWT \ JWTを使用します。

\コントローラを考えて使用します。

クラスベースコントローラが延び
{ 
    パブリック関数_initialize()
    { 
        親:: _初期化()。
        の$ this - > checkToken(); 
    } 

    パブリック関数checkToken()
    { 
        $ヘッダ=要求::インスタンス() - >ヘッダ(); 
        ($ヘッダ[ '許可'] == 'NULL'){もし
            エコーjson_encode([ 
                'ステータス' => 1002
                'MSG' => 'トークン不存在、拒绝访问' 
            ])。
            出口; 
        }他{ 
            $ checkJwtToken =の$ this - > verifyJwt($ヘッダ[ '許可'])。
            ($ checkJwtToken [ '状態'] == 1001)であれば{ 
                trueを返します。
            } 
        } 
    } 

    //校验JWT权限API 
    保護機能verifyJwt($ JWT)
    { 
        $キー= MD5( 'のび太')。
        // JWT :: $の余裕= 3; 
        してみてください{ 
            $ jwtAuth = json_encode(JWT ::デコード($ JWT、$キー、配列( 'HS256'))); 
            $ AUTHINFO = json_decode($ jwtAuth、真の); 
            $ MSG = [];
            (もし!空($ AUTHINFO [ 'user_idの'])){ 
                $ MSG = [
                    'ステータス' => 1001 
                    'MSG' => 'トークンが検証' 
                ;] 
            }他{ 
                $ MSG = [ 
                    'ステータス' => 1002と、
                    'MSG' => 'トークン認証は、ユーザが存在しない障害が発生しました' 
                ]。
            } 
            戻りの$ MSGを; 
        }キャッチ(\ Firebase \ JWT \ SignatureInvalidException $ E){ 
            エコーjson_encode([ 
                'ステータス' => 1002、
                'MSG' => '無効なトークン' 
            ]); 
            出口; 
        }キャッチ(\ Firebase \ JWT \ ExpiredExceptionの$ e)の{
            エコーjson_encode([ 
                'ステータス' => 1003、
                'MSG' => 'トークンの有効期限が切れ'
            ]); 
            出口; 
        }キャッチ(例外の$ E){ 
            リターンする$ E。
        } 
    } 
}

Login.php

コントローラのログを、それがたびに、トークンへの要求をアプリケーショントークンに一致し、かつローカルに格納された遠位へトークンを返す場合、入力されたパスワードが、データベース内のアカウント情報と一致する限り、ユーザを確認するために使用される場合、内部要求ヘッダー

<?phpの
/ ** 
 * PhpStormによって作成されます。
 *ユーザー:のび太の
 *日:2/15 
 *時間:14:55 
 * / 

名前空間のアプリ\ユーザー\コントローラ。

TestModelなどの一般的な\モデル\のび太の\テスト\アプリを使用します。

Firebase \ JWT \ JWTを使用します。

クラスログイン
{ 
    パブリック関数指数()
    { 
        $データ=入力( 'ポスト。'); 
        $ユーザ名=はhtmlspecialchars($データ[ 'ユーザー名']); 
        $パスワード=はhtmlspecialchars($データ[ 'パスワード']); 
        $ユーザ= TestModel ::どこ( 'ユーザ名'、$ユーザ名) - >()を見つけます。
        (もし!空($ユーザー)){ 
            場合(=== $ユーザ名=== $ユーザー[ 'ユーザ名'] && $パスワード$ユーザー[ 'パスワード']){
                    'ステータス' => 1001、
                    '成功のログイン' 'MSG' => 
                    =>自己'JWT' :: createJwt($ユーザー[ 'ID'])
                ]; 
                $ MSGを返す; 
            }他{ 
                [戻る
                    = 'ステータス'に> 1002年、
                    'MSG' => '間違ったアカウントのパスワード' 
                ]; 
            } 
        }他{ 
            [戻る
                'ステータスを' => 1002、
                'MSG' => 'アカウントのパスワードを入力してください。' 
            ];
        } 
    } 

    パブリック関数のcreateJwt($ USERID)
    { 
        $キー= MD5( 'のび太');必要が使用する際// JWTは、キー、認証トークンを発行
        $時間=時間(); //発行時間は
        $ = $時間+ 14400期限が切れる; // 有効期限
        $トークン=配列(
            "user_idは" => $ユーザーIDを、
            "ISS" => "https://199508.com" //発行機関
            "AUD" => "https://199508.com" 、// の発行
            "IAT" => $時間"NBF" => $時間"EXP" => $期限が切れます
        ); 
        $ :: = JWT JWT(トークン$、$キー)をコードする; 
        $ JWTを返します; 
    } 
}

User.php

コードの整合性を検証するために使用します

<?phpの
/ ** 
 * PhpStormによって作成されます。
 *ユーザー:のび太の
 *日:2/15 
 *時間:15:24 
 * / 

名前空間のアプリ\ユーザー\コントローラ。

リクエスト\考えて使用します。

TestModelなどの一般的な\モデル\のび太の\テスト\アプリを使用します。

クラスユーザが基地//继承基础控制器延び
{ 
    パブリック関数インデックス()
    { 
        戻りTestModel ::全て(); 
    } 
}

 

おすすめ

転載: www.cnblogs.com/yehuisir/p/11521233.html