フロントエンドがインターフェースを要求すると、バックエンドでインターフェースが定義されます。ステータス コードが 401 の場合、トークンの有効期限が切れており、フロントエンドが新しいトークンを要求する必要があることを意味します。 一般的なプロセスは次のとおりです。 1. ユーザーがログインすると、バックエンドはストレージに保存されているaccessTokenとrefreshTokenの2つのトークンを返します。 データをリクエストする際、リクエストヘッダーはaccessTokenを使用してインターフェースを送信します 2. トークンの有効期限が切れると、インターフェースを通じてバックエンドから新しいトークンを取得し、リクエストパラメータはrefreshTokenになります。 3. 新しいaccessTokenとrefreshTokenを取得したら、以前のStorageに保存されているトークンを置き換えます。 4. 同時に、新しいaccessTokenを使用して401を報告したインターフェースを再度要求し、データを取得し、トークンの更新をスムーズに行う必要があります。 5. バックエンドから返された新しいトークンが使用できない場合は、再度ログインしてログインページにジャンプする必要があります (この手順は柔軟に使用できます。個人的にはルーティングプラグインを使用しています: https://ext.dcloud.net.cn/plugin?id=578) uni-app プラグインを使用して実装します。 uni-appプラグインマーケットにアクセスして、パッケージ化されたリクエストネットワークリクエストをダウンロードし、ドキュメントに従って独自のプロジェクトに設定してください。 アドレス: https://ext.dcloud.net.cn/plugin?id=159 設定後、vmeitime-httpフォルダ内のindex.jsファイルを変更します。 次に、vmeitime-httpフォルダ内のinterface.jsファイルを変更して401ステータスを公開します。 これを読んでもまだ理解できない場合は、私のソースコードを見てください。2つのプラグインを使用していることに注意してください。それらを注意深く理解して消化し、自分のプロジェクトで検討してください... './interface' から http をインポートします './config' から設定をインポートします // リクエスト.js 'vue' から Vue をインポートします '@/router' から Router をインポートします //...その他のロジックコード export const execute = (name, data = {}) => { //事前リクエストインターセプターを設定する http.interceptor.request = (config) => { トークン = uni.getStorageSync('accessToken') とします。 config.header['x-access-token']を削除します if (トークン) { config.header['x-access-token'] = トークン } } //リクエスト終了後にインターセプターを設定する http.interceptor.response = async (response) => { 定数ステータスコード = 応答.ステータスコード; ステータスコード === 401 の場合 { 応答 = doRequest(応答) を待機します } ステータスコード === 402 の場合 { uni.removeStorageSync('accessToken'); uni.removeStorageSync('refreshToken'); uni.removeStorageSync('実名'); ジャンプ = uni.getStorageSync('ジャンプ') if (!ジャンプ) { タイムアウトを設定する(() => { uni.showModal({ タイトル: 「ヒント」 内容: 「あなたのアカウントは別の場所からログインされています!」 表示キャンセル: false、 成功: function(res) { (res.confirm)の場合{ ルータ.push({ 名前: 'ログイン', パラメータ: { 'ルーター名': 'ホーム' } }) } }, }) }); uni.setStorageSync('ジャンプ', 'true') } } ステータスコード == 403 の場合 ジャンプ = uni.getStorageSync('ジャンプ') if (!ジャンプ) { タイムアウトを設定する(() => { ルータ.replace({ 名前: 'ログイン', パラメータ: { 'ルーター名': 'ホーム' } }) },500) uni.setStorageSync('ジャンプ', 'true') } } // エラー要求の統一された処理 const code = response.data.code; 定数メッセージ = 応答.データ.メッセージ; レスポンスステータスコード == 200 && コード !== 0 && コード != -1 && コード) { uni.showToast({ タイトル: メッセージ、 アイコン: "なし", 期間: 2000 }); } 応答を返します。 } http.request({を返す 名前: 名前、 ベースURL: config.base、 url: config.interface[名前].path, メソッド: config.interface[name].method ? config.interface[name].method : 'GET', データ型: 'json', データ、 }) } エクスポートデフォルト{ 実行する } // リフレッシュトークンメソッド async function doRequest(response) { const res = 実行を待機します('refresh'、{refreshToken: uni.getStorageSync('refreshToken')}) 定数{ コード、 データ } = res.データ (コード == 0) の場合 { uni.setStorageSync('accessToken', data.accessToken) uni.setStorageSync('refreshToken', data.refreshToken) config = response.config とします。 config.header['x-access-token'] = data.accessToken const resold = 実行を待機(config.name,{ ...config.data }) 返品 再販 } それ以外 { uni.removeStorageSync('accessToken'); uni.removeStorageSync('refreshToken'); uni.showToast({ タイトル: 「ログイン期限が切れました。再度ログインしてください。」 '、 アイコン: "なし", 成功() { ルータ.push({ 名前: 'ログイン', パラメータ: { 'ルーター名': 'ホーム' } }) } }); } } 以上が、uniappの無痛トークンリフレッシュ方法の詳しい説明です。uniappの無痛トークンリフレッシュ方法の詳細については、123WORDPRESS.COMの他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: VC6.0をWIN10にインストールすると使用できない問題の解決方法
この記事では、最も単純なビデオ連射機能をシミュレートするデモを作成します。アイデア:再生する動画と同...
目次1. 分離レベルコミットされていない読み取りREAD COMMITED (コミット読み取り/非反...
この記事では、MySQL 8.0.15をダウンロードしてインストールするための具体的な手順を参考まで...
1.1 一般的なマーキング一般的なタグは開始タグと終了タグで構成されます。構文は次のとおりです: ...
参考までに、Winでmysql5.7をインストールします。具体的な内容は次のとおりです。 @Auth...
環境システム: Ubuntu 18.04ソフトウェア: qt5.12.8 1. インストールパッケー...
CSS3変数について変数を宣言するときは、変数名の前に 2 つのハイフン ( -- ) を追加します...
コンテンツ詳細タグ: <h1>~<h6>タイトルタグ<pre>テ...
B ツリーは一般的なデータ構造です。彼と一緒にB+ツリーがあります。ここで、概念を明確にする必要があ...
目次序文JSON.stringify の 6 つの機能特集1特集2特集3特集4特集5特集6手動で文字...
この記事では、例を使用して、MySQL ストアド プロシージャでの if ステートメントの使用方法を...
HTML 検証はHTML 検証を指します。これは、HTML ドキュメントを分析し、標準の HTML ...
集計関数データセットに作用し、そのデータセットの値を返します。 count: 統計結果のレコード数。...
Web ページの読み込み速度は、Web サイトの品質を評価するための重要な指標です。その理由は、ほと...
序文数日前、偶然、コーナーの四角形が欠落している機能に遭遇しました。最初に頭に浮かんだのは、必要な場...