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

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

プロセス

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

推薦する

検索データ表示を実装するJavaScript

この記事ではJavaScript検索のデータ表示コードを参考までに共有します。具体的な内容は以下のと...

Centos7.5でのIPアドレス設定の実装

1. IPアドレスを設定する前に、まずifconfigを使用してネットワークカード情報を表示し、ネッ...

DockerプライベートライブラリHarborのアーキテクチャとコンポーネントの説明

この記事では、Harbor アーキテクチャの構成と、実行時に各コンポーネントを使用する方法について説...

React+axios は github 検索ユーザー機能を実装します (サンプル コード)

負荷リクエスト成功リクエストに失敗しました cmdをクリックし、ファイルパスでEnterキーを押しま...

Vue で Alibaba のアイコンフォント ベクター アイコンを使用する方法について

インターネット上には多くのインポート方法があり、公式も3つのインポート方法を提供していますが、インポ...

WeChatアプレットでQRコードを識別するために長押しする実装プロセス

序文公式アカウントのQRコードは長押しで認識できることは皆さんご存じですが、ミニプログラムに対する制...

ウェブページの広告デザインにおけるウェブデザインの寸法とルール

1. 800*600 未満の場合、Web ページの幅が 778 以内であれば、水平スクロール バーは...

ウェブページコンテンツの閲覧設計手法に関する議論

<br />コンテンツ ページの記事の場合、記事が長すぎる場合やカテゴリ (ランキング)...

CSS3 変換によって子要素の固定位置を絶対位置に変更する方法

この記事では、CSS3 の transform を使用して子要素の固定配置を絶対配置に変更する方法を...

MySQLのスケジュールタスクが正常に実行できない原因の分析と解決

目次序文原因分析と解決策スケジュールされたタスクを迅速に実行する要約する序文データベースのスケジュー...

Linux での Firewalld の高度な設定の使用に関する詳細な説明

IPマスカレードとポート転送Firewalldは2種類のネットワークアドレス変換をサポートしています...

テーブルセルの幅tdの設定は無効であり、内部コンテンツによって常に引き伸ばされます

テーブルページを作成するときに、td に設定された幅が無効になることがあります。td の幅は常に内部...

Vue は検証コードのカウントダウンボタンを実装します

この記事では、検証コードカウントダウンボタンを実装するためのVueの具体的なコードを例として紹介しま...

Linuxはバイナリモードを使用してmysqlをインストールします

この記事では、LinuxにバイナリモードでMySQLをインストールする具体的な手順を参考までに紹介し...

Docker コンテナのデプロイの試み - マルチコンテナ通信 (node+mongoDB+nginx)

その理由はモッカー プラットフォームを導入したかったので、友人の勧めで既成のプロジェクト api-m...