トークン生成と検証を実装するミニプログラム

トークン生成と検証を実装するミニプログラム

プロセス

各リクエストインターフェースは検証用のトークンを運ぶ
1. 検証が成功すると、インターフェースデータが返されます。
2. 検証に失敗した場合(トークンの有効期限が切れた場合)、アプレットは新しいトークンの生成を再度要求し、その後、以前のインターフェースを要求します。

キー値: 乱数 + タイムスタンプ + ソルト
値: id+session_key+openid

デモ

ミニプログラム

<表示>
  <button bindtap="loadTokenData">トークン要求データを送信する</button>
</ビュー>
ページ({
  データ: {
  },
 
  onLoad:関数(){
    // this._loadData();
  },
 
  //トークンを生成する
  setToken:function(コールバック){
    // wx.setStorageSync('token', "sfspx64w8x47w14x3zX4x4wf4")
    var that = this;
    wx.リクエスト({
      URL: 'http://2021xcx-api.com/api/gettoken',
      メソッド: 'POST'、
      成功: function(res){
        コンソールにログ出力します。
        var データ = res.data;
        if(データコード==1){
          //新しく取得したトークン値を更新します wx.setStorageSync('token', data.token);
          // コールバック関数 callback&&callback() を実行する
        }それ以外{
          .setToken();
        }
      }
    })
  },
 ロードトークンデータ:関数(){
   var that = this;
    wx.リクエスト({
      URL: 'http://2021xcx-api.com/api/orders',
      メソッド: 'POST'、
      ヘッダー: {
        'コンテンツタイプ': 'application/json',
        'トークン': wx.getStorageSync('トークン')
      },
      成功: function(res){
        var データ = res.data;
        コンソール.log(データ)
        if(データコード==903){
          // トークンの有効期限が切れたので、再度設定するよう要求します // コールバック関数を実行し、トークンが再取得された後もこのメソッドの実行を継続します。
          that.setToken(that.loadTokenData)
        }
      }
    })
  },
}) 

バックエンドインターフェース

ルーティング構成

<?php
Route::post("api/orders", "api/index/getOrders");
//トークン
Route::post("api/gettoken", "api/token/createToken");

インデックス.php

<?php
名前空間 app\api\controller;
app\api\controller\Token を使用します。
think\Cache を使用します。
 
IndexクラスはTokenを拡張します
{
    パブリック関数 getOrders(トークン $token){
        $token->verifyToken();
 
        $data['注文'] = [
            'id' => 1,
            'タイトル' => 'リンゴ',
            '時間' => 時間()
        ];
        json_encode($data) をエコーし​​ます。
 
    }
}

トークン.php

<?php
名前空間 app\api\controller;
think\Controller を使用します。
 
クラス Token は Controller を拡張します
{
    保護された$returnParam = [
        'コード' => 1,
        'msg' => 'リクエストが失敗しました'
    ];
 
    /**
     * [verifyTokenはトークンが運ばれ、存在するかどうかを検証します]
     * @return [型] [説明]
     */
    パブリック関数verifyToken(){
        $token = request()->header()['token'];
        $isSetToken = キャッシュ($token);
        // dump($isSetToken); die;
        if(!$isSetToken){
            $this->returnParam['code'] = 903;
            $this->returnParam['msg'] = "トークンの検証に失敗しました";
            echo json_encode( $this->returnParam );die;
        }
    }
    
    /**
     * [createToken トークン生成]
     * ヒント: トークンにユーザーID/session_kye/openidを記録する
     * @return [型] [説明]
     */
    パブリック関数 createToken()
    {
        1,9999 は 1 です。
        時間
        セール価格
 
        // * ここでシミュレートします--WeChatインターフェースはセッションキーとopenidを取得するために要求されません $tokenValue = [
            'uid' => 1,
            'セッションキー' => '84848aasa',
            'オープンID' => '20oxl65wc4d4s5x7hwc',
            'コード' => 'sssaaeee'
        ];
        $tokenKey = md5($randStr.$time.$sale);
        //トークンデータをキャッシュします。cache($tokenKey, json_encode($tokenValue), 1);
 
        $戻り値 = [
            'コード' => 1,
            'トークン' => $トークンキー
        ];
        json_encode をエコーし​​ます($returnParam);
    }
   
} 

ミニプログラムトークン生成と検証に関するこの記事はこれで終わりです。ミニプログラムトークン生成と検証に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き閲覧してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • WeChatミニプログラムでトークンの有効期限を処理する方法
  • WeChatミニプログラムクローラートークン自動更新問題について
  • Access_Tokenの統合管理を実現するミニプログラム開発
  • WeChatミニプログラムにログインしてトークンを交換する方法のチュートリアル
  • WeChatアプレットURLとトークン設定の詳細な説明

<<:  CSS クロスブラウザ スタイルのバグのデバッグについて

>>:  MySqlエスケープの詳細な使用例

推薦する

VUE ユニアプリの条件付きコーディングとページレイアウトに関する簡単な説明

目次条件付きコンパイルページレイアウト要約する条件付きコンパイル条件付きコンパイルでは、特別なコメン...

Nginx で Basic Auth ログイン認証を設定する方法

nginx でファイルサーバーを構築することもありますが、これは一般に公開されていますが、サーバーが...

9999px に別れを告げる新しい CSS 画像置換テクニック (背景表示と画面外へのテキストの移動)

-9999 ピクセルの画像置換技術は、ここ 10 年近く人気があります。テキスト要素を画像に置き換え...

JavaScriptスコープについての簡単な説明

目次1. 範囲1. グローバルな範囲2. ローカルスコープ2. 変数のスコープ1. グローバル変数2...

MySQL 5.7.17 のインストールと設定方法のグラフィックチュートリアル (Win7 の場合)

Windows 7 で MySQL 5.7.17 をインストールする方法についてのグラフィック チ...

CSSは複数の要素をボックスの両端に揃える効果を実現します

要素の両端を揃える配置レイアウトは、実際の開発のいたるところで見られます。これは、フレックスレイアウ...

MySQL クラスター化インデックスのページ分割原理の分析例

この記事では、MySQL クラスター化インデックスのページ分割を例を使って説明します。ご参考までに、...

Dockerネットワーク作成に--subnetを追加した後の問題を解決する

Docker ネットワークの作成に –subnet を追加した後、docker network ls...

新しいユーザーを作成し、MySQLに権限を付与する最も簡単な方法

ユーザーを作成します: 'oukele' によって識別されるユーザー 'ou...

MySQL ステートメントを使用した簡単な追加、削除、変更、クエリ操作の例

この記事では、例を使用して、MySQL ステートメントを使用して、単純な追加、削除、変更、およびクエ...

Chrome、Firefox、IEで入力カーソルの位置がずれる問題の解決方法

ブラウザで入力カーソルがずれる問題の詳しい説明<br />仕事で問題に遭遇し、解決策を探...

Vue 組み込みコンポーネントのキープアライブでの LRU アルゴリズムの使用

目次Vue の keep-alive 組み込みコンポーネントの使用でもこのアルゴリズムが使用されます...

MySQLトランザクションが効率に与える影響の分析と概要

1. データベース トランザクションによりデータベースのパフォーマンスが低下します。データの一貫性と...

MySQL で 1 つのテーブルのフィールドを使用して別のテーブルのフィールドを更新する方法

1. 1列を変更する 学生の更新、都市c s.city_name = c.name を設定します こ...

MySQL 5.7.22 バイナリパッケージのインストールとインストール不要版 Windows 設定方法

次のコードは、MySQL 5.7.22 バイナリ パッケージのインストール方法を紹介しています。具体...