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

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

プロセス

各リクエストインターフェースは検証用のトークンを運ぶ
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エスケープの詳細な使用例

推薦する

aタグ内のテキストを非表示にして画像を表示するには?360モードレンダリングに対応

多くの場合、画像を表示する<a>タグのスタイルに遭遇しますが、タグ内にテキストがあり、そ...

CSS の両端揃えを実現する div+css レイアウトの 4 つの方法の概要

2 端揃えを実現する div+css レイアウトは、Web ページの組版でよく使用されます。この記事...

Linux CentOS 6.5 のアンインストール、tar、および MySQL のインストールチュートリアル

システム提供のMySQLをアンインストールする1. MySQLがシステムにインストールされているかど...

Linux環境でrmによって誤って削除されたファイルを回復する方法

目次序文RMの後には希望はあるのでしょうか?最前線を使ってファイルを取得するextundeleteを...

NetEase ブログで使用されているシンプルな Web ページ コード

NetEase Blog でコードを使用する方法: まずブログにログインし、ブログのホームページの左...

MySQL シリーズ: redo ログ、undo ログ、binlog の詳細な説明

取引の実施REDO ログはトランザクションの永続性を保証し、UNDO ログはトランザクションのロール...

Docker での Redis の永続ストレージの詳細な説明

この章では、dockerの下にあるSpring BootプロジェクトでRedisを操作し始めます。準...

HTML+CSS で div タグの右上隅に削除アイコンを追加するサンプルコード

1. 要件の説明Divタグの右上隅に削除アイコンを表示します2. 実装html、CSS 3. 参照コ...

JS変数ストレージのディープコピーとシャローコピーの詳しい説明

目次可変タイプとストレージスペーススタックメモリとヒープメモリ基本的なデータ型参照タイプグラフィック...

Linux での NVIDIA GPU 使用状況の監視の詳細な説明

TensorFlow をディープラーニングに使うとビデオメモリ不足がよく起こるので、GPU 使用状況...

CentOS 7.4 に MySQL 5.7 を手動でインストールする方法

MySQL データベースは、特に JAVA プログラマーの間で広く使用されています。クラウド データ...

CentOS の MySQL に MariaDB をインストールするときに発生する方法と問題

以前にインストールしたmariadbを削除する1. rpm -qa | grep mariadb を...

HTML の色に関する参考資料

HTML では、色は 2 つの方法で表現されます。 1 つは、青の場合は blue のように色の名前...

Vite と Vue CLI の長所と短所

Vue エコシステムには Vite と呼ばれる新しいビルド ツールがあり、Vue CLI よりも 1...

Ubuntu 20.04でAliソースを変更する方法

なお、この記事では、単に 20.04 ソースに変更する方法を説明するのではなく、20.04 に基づい...