ThinkPHP5 - think-API を使用して JWT をデプロイする

藏色散人
リリース: 2019-09-30 18:09:30
転載
3466 人が閲覧しました

次のプロジェクトでは TP5 を使用して小さなプログラムを開発するため、TP フレームワークを使用しました。小さなプログラムの開発には API インターフェイスを記述するためのバックグラウンドが必要なため、関連する依存関係があるかどうかをオンラインで確認しました。お勧めします。 think-api 拡張ツール、主に jwt 関数を使用してミニ プログラム ユーザーのログイン ステータスを確認したいため、私のプロジェクトを例として、think-api を介した JWT のデプロイについて簡単に説明します。

1. インストールの依存関係

私が使用する TP バージョンは TP5.1 で、拡張機能のダウンロード アドレスは https://github.com/czewail/think- です。 API、コンポーザーを介して依存関係をインストールします:

$ composer require zewail/think-api:1.1.x
ログイン後にコピー

2. 設定手順

拡張機能がインストールされたら、vendor/think-api/config/ で確認できます。 jwt.php ファイルの jwt 設定。

主にユーザー モデル パスを変更する必要があります:

return [
    // 加密算法
    'algorithm'      => 'HS256',
    // HMAC算法使用的加密字符串
    'key'            => 'ex-key',
    // RSA算法使用的私钥文件路径
    'privateKeyPath' => '/home/rsa_private_key.pem',
    // RSA算法使用的公钥文件路径
    'publicKeyPath'  => '/home/rsa_public_key.pem',
    // 误差时间,单位秒
    'deviation'      => 60,
    // 过期时间, 单位分钟
    'ttl'            => 120,
    // 用户模型路径
    'user'           => app\api\model\User::class,
];
ログイン後にコピー

3. API インターフェイス コントローラーの作成

コマンド ラインを使用して必要なものを作成します。トークンをフロントエンド コントローラーに返すには

$ php thnk make:controller api/Index
ログイン後にコピー

4. 参照の依存関係

作成されたファイル ヘッダーにファイル パスを追加します: Zewail\Api\Facades\ を使用します。 JWT; ケース コードは次のとおりです:

public function index()
    {
        //获取前台发送过来的登录信息
        $tel      = $this->request->tel;
        $password = $this->request->passwword;
        //把登录信息传入JWT验证匹配
        $credentials = ['tel' => $tel, 'password' => $password];
        //1.验证通过返回token  1和2任意取一种方式
        $token = JWT::attempt($credentials);
        //2.通过已有账户模型生成token  1和2任意取一种方式
        $user  = User::find(84);
        $token = JWT::fromUser($user);
        $msg   = "验证成功";
        //把token发送给前台确认是否成功登陆
        return $this->ApiSuccess($token, $msg);
    }
ログイン後にコピー

注意すべき点の 1 つは、API のデフォルトの受信パラメータがモバイルとパスワードであることです。戸別訪問の例では、電話番号とパスワードです。変数名が変更されているため、説明するためにユーザー モデルにコードを挿入する必要があります。等々。

public $jwtSub = 'tel';
ログイン後にコピー

5. ルーティングの設定

在 route/route.php 中加入路由地址 Route::get('api/test', 'api/Index/index');
ログイン後にコピー

6. テストの実行

postman でのテスト結果は以下の通りです。トークンはバックグラウンドで生成され、検証とログインのためにフロント デスクに返されます。

ThinkPHP5 - think-API を使用して JWT をデプロイする

7. 検証トークン (補足)

以前に生成されたトークンをヘッダーを含めて postman で再送信します。以下の図に示すように、バックエンドでトークン検証を実行します。

ThinkPHP5 - think-API を使用して JWT をデプロイする

次に、検証ルートにアクセスするためのヘッダーを運びます。検証コードは次のとおりです:

       if ($user = JWT::authenticate()) {
                return true;
        }
ログイン後にコピー

検証が正しければ true が返されます。

8. トークン不存在とトークン有効期限の問題について(補足)

vendor\think-api\src\JWT/Factories\code内。 php ファイル think-api インターフェイスは、対応するエラー フィードバックを提供します。

// 检查是否过期
if (isset($payload->exp) && (time() - $this->deviation) >= $payload->exp) {
    throw new TokenExpiredException('该 Token 已过期');
}
// 验证签名
if (!$this->verify("$header64.$payload64", $signature)) {
    throw new TokenInvalidException('无效的 Token');
}
ログイン後にコピー

では、これらのステータス フィードバックをどのように使用すればよいでしょうか? これには、フロントエンド ミドルウェアを使用して、フロントエンドによって送信されたトークン情報を確認する必要があります。

最初にミドルウェアを作成します:

$ php think make:middle Test
ログイン後にコピー

次に、ミドルウェアに次の内容を記述します:

  //用try catch捕获报错反馈
    public function handle($request, Closure $next)
    {
        try {
            if (!$user = JWT::authenticate()) {
                return response()->json([
                    'errcode' => 1004,
                    'errmsg'  => '无此用户',
                ], 404);
            }
            return $next($request);
        } catch (TokenExpiredException $e) {
            return response()->json([
                'errcode' => 1003,
                'errmsg'  => 'token 过期', //token已过期
            ]);
        } catch (TokenInvalidException $e) {
            return response()->json([
                'errcode' => 1002,
                'errmsg'  => 'token 无效', //token无效
            ]);
        } catch (JWTException $e) {
            return response()->json([
                'errcode' => 1001,
                'errmsg'  => '缺少token', //token为空
            ]);
        }
    }
ログイン後にコピー

それからルート内でそれを参照するだけです。

推奨チュートリアル: thinkphp チュートリアル

以上がThinkPHP5 - think-API を使用して JWT をデプロイするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:learnku.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート