2016-05-14 7 views
2

Wie kann ich einen interceptor in vue.js verwenden? Also vor jeder Anfrage/Antwort sollte es zuerst zum Abfangjäger gehen. Ich habe schon viel gesucht, kann aber keine gute Dokumentation dazu finden.Vue.js Abfangjäger

Ich möchte JWTAuth wie folgt verwenden:

(function (define) { 
    'use strict' 

    define(function (require) { 

    var interceptor 

    interceptor = require('rest/interceptor') 

    /** 
    * Authenticates the request using JWT Authentication 
    * 
    * @param {Client} [client] client to wrap 
    * @param {Object} config 
    * 
    * @returns {Client} 
    */ 
    return interceptor({ 
     request: function (request, config) { 
     var token, headers 

     token = localStorage.getItem('jwt-token') 
     headers = request.headers || (request.headers = {}) 

     if (token !== null && token !== 'undefined') { 
      headers.Authorization = token 
     } 

     return request 
     }, 
     response: function (response) { 
     if (response.status && response.status.code === 401) { 
      localStorage.removeItem('jwt-token') 
     } 
     if (response.headers && response.headers.Authorization) { 
      localStorage.setItem('jwt-token', response.headers.Authorization) 
     } 
     if (response.entity && response.entity.token && response.entity.token.length > 10) { 
      localStorage.setItem('jwt-token', 'Bearer ' + response.entity.token) 
     } 
     return response 
     } 
    }) 

    }) 

}(
    typeof define === 'function' && define.amd ? define : function (factory) { module.exports = factory(require) } 
    // Boilerplate for AMD and Node 
)) 

Aber ich weiß nicht, wie vor jedem Request/Response abzufangen. (Ich benutze Laravel 5.2).

+0

Haben Sie darüber nachgedacht mit vue-Ressource? – gurghet

Antwort

11

Beispiel für die globale config:

Vue.http.interceptors.push({ 

    request: function (request){ 
    request.headers['Authorization'] = auth.getAuthHeader() 
    return request 
    }, 

    response: function (response) { 
    //console.log('status: ' + response.data) 
    return response; 
    } 

}); 

request ist Verkehr und response wenn für eingehende Nachrichten für outcoming

lokale Konfiguration in vue-Komponente ist ebenfalls möglich.

EDIT - seit sytax jetzt geändert hat es soll wie folgt aussehen:

Vue.http.interceptors.push((request, next) => { 
    request.headers['Authorization'] = auth.getAuthHeader() 
    next((response) => { 
    if(response.status == 401) { 
     auth.logout(); 
     router.go('/login?unauthorized=1'); 
    } 
    }); 
}); 
+1

Scrolling verwenden beachten Sie, dass diese Antwort ein wenig veraltet ist, die Syntax ist jetzt etwas anders. Wie Linus in seiner Antwort bemerkte, überprüfen Sie die Dokumentation: https://github.com/pagekit/vue-resource/blob/master/docs/http.md#interceptors – Stephan

+0

was ist, wenn ich 'vue.http.intercepters' in mehrere hinzufügen Dateien ?? Dann geht Code in jede Datei vor dem HTTP-Aufruf? –

3

Vue selbst hat keine AJAX-Funktionalität. Sprechen Sie über die Plugin-Vue-Ressource oder verwenden Sie eine andere Bibliothek für Anfragen?

vue-Ressource unterstützt hat intereceptors: https://github.com/vuejs/vue-resource/blob/master/docs/http.md (scrollen zum letzten Abschnitt unten)

+1

Sie können Links zu Abschnitt (https://github.com/vuejs/vue-resource/blob/master/docs/http.md#interceptors) anstelle von – user3479125