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

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

プロセス

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

推薦する

CSS3 のカラー値 RGBA とグラデーションカラーの使用方法の紹介

CSS3以前は、グラデーション画像は背景画像としてのみ使用できました。 CSS3 のグラデーション構...

Linux システムで Code Cloud にプロジェクトをアップロードする方法

Code Cloudで新しいプロジェクトtest1を作成します。 公開鍵を取得するには次のコマンドを...

Windows で Graphviz をインストールして開始する方法のチュートリアル

ダウンロードとインストール環境変数の設定インストール環境変数の設定確認基本的な描画の紹介グラフディグ...

Nginx で https をアップグレードする方法

購入証明書Alibaba CloudのCloud Shield証明書サービスから購入できます。証明書...

HTML テーブルに複雑なテーブル ヘッダーを実装するためのサンプル コード

複雑な表を作成するには HTML を使用します。複雑なテーブルでは通常、td の rowspan 属...

CSS を使用して同じ親タグの左側と右側に 2 つのボタンを配置する方法

この記事では、主に同じ親タグの左側と右側にある 2 つのボタンの CSS レイアウト方法を紹介し、皆...

MySQLのデッドロックチェック処理の通常の方法

通常、デッドロックが発生すると、重みが最も小さい接続が強制終了され、ロールバックされます。ただし、最...

Django 2.2 を MySQL データベースに接続する方法

1. プロジェクトの実行時に報告されるエラー情報は次のとおりです。 ファイル "/home...

Linuxで同一ファイルを見つける方法

コンピュータを使用すると、システム内に大量のゴミが生成されます。最も一般的なケースは、同じファイルが...

MySQL 8.0.18 のさまざまなバージョンのインストールとインストール中に発生した問題 (要点の要約)

概要: MYSQLの問題解決記録:どのようなインストール方法 (rpm、gz、gz.xz) を使用す...

Web開発でボックスを中央に配置するいくつかの方法

1. ボックスを中央に配置するいくつかの方法を記録します。 1.0、マージン幅固定、高さ中央配置。 ...

iframe に関するいくつかの発見と考察

この物語は、今日の予期せぬ発見から始まります。同社には複数のウェブサイトがある。友達リンクにはお互い...

MySQL Binlog ログ処理ツールの比較分析

目次運河マクスウェルデータバスAlibaba Cloud のデータ転送サービス (DTS)運河ポジシ...

JavaScript を使用して div の位置をドラッグして入れ替える例

1 実施原則これは、DOM 要素の dragstart/ondragover/ondrop イベント...

Mysql の追加、削除、変更、クエリステートメントのシンプルな実装

Mysql の追加、削除、変更、クエリステートメントのシンプルな実装追加されたレコード: テーブル名...