So aktualisieren Sie das Token in Vue
In diesem Artikel erfahren Sie, wie Sie Token in Vue aktualisieren. Der Inhalt ist sehr gut. Ich hoffe, er kann allen helfen.
Token-Authentifizierungsmechanismus
Nachdem die Client-Anmeldeanforderung erfolgreich war, verschlüsselt der Server die Benutzerinformationen (z. B. Benutzer-ID) mithilfe eines speziellen Algorithmus und sendet sie an Wenn der Benutzer das nächste Mal eine Anfrage initiiert, wird dieses Token übermittelt und der Server entschlüsselt das Token zur Überprüfung. Wenn es erfolgreich ist, werden die angeforderten Daten an den Server zurückgegeben Client; andernfalls schlägt die Anfrage fehl.
Vorteile des Tokens
Es ist zustandslos und der Server muss keine Sitzungsinformationen wie bei der herkömmlichen Identitätsauthentifizierung (Sitzung) speichern, was den Druck auf den Server verringert .
Vues Token-Aktualisierungsverarbeitung
Nach einer kurzen Einführung in den Token-Authentifizierungsmechanismus geben Sie den Text ein...
Allgemein Für die Aus Sicherheitsgründen wird für das Token eine Ablaufzeit festgelegt. Nach Ablauf kann die entsprechende Schnittstelle nicht mehr angefordert werden. Was soll ich zu diesem Zeitpunkt tun?
Im aktuellen Projekt des Unternehmens haben wir uns für eine bessere Benutzererfahrung entschieden, den Token manuell zu aktualisieren. Nachdem die Anmeldeanforderung erfolgreich war, werden ein Token und die Token-Ablaufzeit zurückgegeben. Bei jeder Anforderung der API kann das Frontend zunächst feststellen, ob das Token bald abläuft oder abgelaufen ist. Wenn ja, fordern Sie die Aktualisierungstoken-Schnittstelle an und den ursprünglichen Token erfolgreich ersetzen. Erst dann kann die Anforderung erneut gestartet werden.
Als nächstes schauen wir uns direkt den Code an. Dies ist die relevante Operation, die im Anforderungsinterceptor von vue ausgeführt wird:
/*是否有请求正在刷新token*/ window.isRefreshing = false /*被挂起的请求数组*/ let refreshSubscribers = [] /*获取刷新token请求的token*/ function getRefreshToken () { return JSON.parse(localStorage.auth).refresh_token } /*push所有请求到数组中*/ function subscribeTokenRefresh (cb) { refreshSubscribers.push(cb) } /*刷新请求(refreshSubscribers数组中的请求得到新的token之后会自执行,用新的token去请求数据)*/ function onRrefreshed (token) { refreshSubscribers.map(cb => cb(token)) } /*请求拦截器*/ ajax.interceptors.request.use( config => { const authTmp = localStorage.auth /*判断是否已登录*/ if (authTmp) { /*解析登录信息*/ let auth = JSON.parse(authTmp) /*判断auth是否存在*/ if (auth) { /*在请求头中添加token类型、token*/ config.headers.Authorization = auth.token_type + ' ' + auth.token /*判断刷新token请求的refresh_token是否过期*/ if (util.isRefreshTokenExpired()) { alert('刷新token过期,请重新登录') /*清除本地保存的auth*/ localStorage.removeItem('auth') window.location.href = '#/login' return } /*判断token是否将要过期*/ if (util.isTokenExpired() && config.url.indexOf('admin/auth/current') === -1) { /*判断是否正在刷新*/ if (!window.isRefreshing) { /*将刷新token的标志置为true*/ window.isRefreshing = true /*发起刷新token的请求*/ apiList.refreshToken({refresh_token: getRefreshToken()}).then(res => { /*将标志置为false*/ window.isRefreshing = false /*成功刷新token*/ config.headers.Authorization = res.data.data.token_type + ' ' + res.data.data.token /*更新auth*/ localStorage.setItem('auth', JSON.stringify(res.data.data)) /*执行数组里的函数,重新发起被挂起的请求*/ onRrefreshed(res.data.data.token) /*执行onRefreshed函数后清空数组中保存的请求*/ refreshSubscribers = [] }).catch(err => { alert(err.response.data.message) /*清除本地保存的auth*/ // localStorage.removeItem('auth') window.location.href = '#/login' }) } /*把请求(token)=>{....}都push到一个数组中*/ let retry = new Promise((resolve, reject) => { /*(token) => {...}这个函数就是回调函数*/ subscribeTokenRefresh((token) => { config.headers.Authorization = 'Bearer ' + token /*将请求挂起*/ resolve(config) }) }) return retry } } return config } else { /*未登录直接返回配置信息*/ return config } }, /*错误操作*/ err => { return Promise.reject(err) } )
Hier sind einige Punkte zu beachten:
1. Wenn das Token bald abläuft oder abgelaufen ist, benötigen wir im Prinzip nur eine Schnittstelle, um eine Anforderung zum Aktualisieren des Tokens auszulösen Sperren: Wenn der Vorgang zum Aktualisieren des Tokens ausgelöst wird, werden andere Triggervorgänge ausgeschlossen.
window.isRefreshing = false
2. Die Aktualisierungstokenschnittstelle verwendet auch aus Sicherheitsgründen ein anderes Token, das jedoch im Allgemeinen länger ist als das Ablaufdatum gewöhnlicher Token Es dauert lange, daher werden Sie im obigen Code feststellen, dass ich beim Abfangen der Anforderung Priorität habe, ob das Refresh_token abgelaufen ist. Wenn es abläuft, werde ich mich direkt abmelden, ohne mit dem nächsten Schritt fortzufahren.
/*判断刷新token请求的refresh_token是否过期*/ if (util.isRefreshTokenExpired() && config.url.indexOf('admin/auth/current') === -1) { alert('刷新token过期,请重新登录') /*清除本地保存的auth*/ localStorage.removeItem('auth') window.location.href = '#/login' return }
3. Nachdem wir den Vorgang zum Aktualisieren des Tokens ausgelöst haben, müssen wir zuerst andere Anforderungen aussetzen und diese Anforderungen dann erneut initiieren, nachdem wir das neue Token erhalten haben.
/*把请求(token)=>{....}都push到一个数组中*/ let retry = new Promise((resolve, reject) => { /*(token) => {...}这个函数就是回调函数*/ subscribeTokenRefresh((token) => { config.headers.Authorization = 'Bearer ' + token /*将请求挂起*/ resolve(config) }) }) return retry
Führen Sie den folgenden Code im Erfolgsrückruf der Aktualisierungstokenanforderung aus und initiieren Sie die Anforderung erneut.
/*执行数组里的函数,重新发起被挂起的请求*/ onRrefreshed(res.data.data.token)
Da jemand in den Kommentaren nach der Util-Datei gefragt hat, möchte er wahrscheinlich wissen, wie er den Token-Ablauf ermitteln kann. Tatsächlich wird eine Token-Ablaufzeit zurückgegeben Rufen Sie es zuerst auf und nehmen Sie es dann bei Bedarf heraus und vergleichen Sie es mit der Ortszeit
/*判断token是否过期*/ function isTokenExpired() { /*从localStorage中取出token过期时间*/ let expiredTime = new Date(JSON.parse(localStorage.auth).expired_at).getTime() / 1000 /*获取本地时间*/ let nowTime = new Date().getTime() / 1000 /*获取校验时间差*/ let diffTime = JSON.parse(sessionStorage.diffTime) /*校验本地时间*/ nowTime -= diffTime /*如果 < 10分钟,则说明即将过期*/ return (expiredTime - nowTime) < 10*60 }
Verwandte Empfehlungen:
Detaillierte Analyse von SFC und vue -loader in Vue
So übertragen Sie Werte zwischen übergeordneten und untergeordneten Vue-Komponenten
Das obige ist der detaillierte Inhalt vonSo aktualisieren Sie das Token in Vue. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen











Die Verwendung von Bootstrap in Vue.js ist in fünf Schritte unterteilt: Startstrap installieren. Bootstrap in main.js. Verwenden Sie die Bootstrap -Komponente direkt in der Vorlage. Optional: benutzerdefinierter Stil. Optional: Verwenden Sie Plug-Ins.

Sie können der VUE -Taste eine Funktion hinzufügen, indem Sie die Taste in der HTML -Vorlage an eine Methode binden. Definieren Sie die Methode und schreiben Sie die Funktionslogik in der VUE -Instanz.

Mit der Watch -Option in Vue.js können Entwickler auf Änderungen in bestimmten Daten anhören. Wenn sich die Daten ändert, löst sich eine Rückruffunktion aus, um Aktualisierungsansichten oder andere Aufgaben auszuführen. Zu den Konfigurationsoptionen gehören unmittelbar, die festlegen, ob ein Rückruf sofort ausgeführt werden soll, und Deep, das feststellt, ob Änderungen an Objekten oder Arrays rekursiv anhören sollen.

VUE Multi-Page-Entwicklung ist eine Möglichkeit, Anwendungen mithilfe des Vue.js-Frameworks zu erstellen, in dem die Anwendung in separate Seiten unterteilt ist: Code-Wartung: Die Aufteilung der Anwendung in mehrere Seiten kann das Verwalten und Wartungsbereich erleichtern. Modularität: Jede Seite kann als separates Modul für eine einfache Wiederverwendung und den Austausch verwendet werden. Einfaches Routing: Die Navigation zwischen Seiten kann durch einfache Routing -Konfiguration verwaltet werden. SEO -Optimierung: Jede Seite hat eine eigene URL, die SEO hilft.

VUE.JS hat vier Methoden, um zur vorherigen Seite zurückzukehren: $ router.go (-1) $ router.back () verwendet & lt; Router-Link to = & quot;/& quot; Komponentenfenster.history.back () und die Methodenauswahl hängt von der Szene ab.

Es gibt drei gängige Methoden für Vue.js, um Arrays und Objekte zu durchqueren: Die V-für-Anweisung wird verwendet, um jedes Element zu durchqueren und Vorlagen zu rendern; Die V-Bind-Anweisung kann mit V-für dynamisch Attributwerte für jedes Element verwendet werden. und die .MAP -Methode kann Array -Elemente in Neuarrays umwandeln.

NetflixuSesacustomframeworkcalted "Gibbon" Builtonreact, NotreactorVuedirect.1) TeamExperience: Wählen Sie beobädtes Vertrauen

Es gibt drei Möglichkeiten, sich auf JS -Dateien in Vue.js zu beziehen: Geben Sie den Pfad direkt mit dem & lt; Skript & gt an. Etikett;; Dynamischer Import mit dem montierten () Lebenszyklushaken; und importieren über die Vuex State Management Library.
