2017-09-13 2 views
2

Ich versuche, Autorisierungstoken auf der Clientseite zu integrieren. Ich gebe dieses Token in der Middleware weiter. Wenn der Benutzer sich abmeldet, setzen Sie das Geschäft zurück und erhalten Sie ein neues Token. Nun, wenn ich neue Anforderung senden ist es immer noch das alte Token Senden (gecached)Apollo resetStore funktioniert nicht in Angular-Client

Hier ist mein Code app.module.ts

const networkInterface = createNetworkInterface({ 
    uri: "http://localhost:3000/graphql" 
}); 

networkInterface.use([ 
    { 
    applyMiddleware(req, next) { 
     if (!req.options.headers) { 
     req.options.headers = {}; // Create the header object if needed. 
     } 

     req.options.headers.authorization = localStorage.getItem(AUTH_TOKEN); 
     next(); 
    } 
    } 
]); 

export function provideClient(): ApolloClient { 
    return new ApolloClient({ 
    networkInterface, 
    dataIdFromObject: (o: any) => `${o.__typename}-${o.id},` 
    }); 
} 

Wenn ich logout Ich habe diesen Code

localStorage.removeItem(AUTH_TOKEN); 
this._apollo.getClient().resetStore(); 

Dann, wenn ich eine andere Anfrage mache, nimmt es immer noch alte Token in Anfrage-Header.

Wie kann ich dies mit dem neuen Token aktualisieren?

networkInterface.use([{ 
    applyMiddleware(req, next) { 
     if (!req.options.headers) req.options.headers = {} 
     const token = localStorage.getItem('token') 
     req.options.headers.authorization = token ? token : null 
     next() 
    } 
}]) 

Hinweis den ternären Operator dort, token ? token : null:

Antwort

0

Ich könnte die Middleware dies ändern. Dadurch wird sichergestellt, dass der Auth-Header nicht gesendet werden kann, es sei denn, die App kennt ein Token. Wenn Ihr Client es weiterhin sendet, wird das Token nicht ordnungsgemäß entfernt.

Sie könnten diesen schnellen Test auch versuchen: Drücken Sie nach dem Abmelden F12 und geben Sie in die Browser-Konsole ein: localStorage und sehen Sie, ob der Token noch da ist.

Ich kann es nicht an Ihrem Code erkennen, aber es sieht so aus, als hätten Sie eine Variable namens AUTH_TOKEN, die eine Zeichenfolge wie 'token' oder einen anderen Schlüssel zurückgibt. Ich möchte nur ausdrücklich erwähnen, dass Sie das Token nach Schlüssel und nicht nach Wert entfernen.

Add token: localStorage.setItem('token', 'e47nes45nysde5nue5nu')

Remove token: localStorage.removeItem('token')

Wenn Sie Code wie folgt lautet:

const AUTH_TOKEN = 'e47nes45nysde5nue5nu' 
localStorage.removeItem(AUTH_TOKEN) 

Dann, weshalb es noch Abfragen mit den Auth-Token machen wird. Ich glaube nicht, dass es Fehler in der Konsole erzeugt, wenn es keinen passenden Schlüssel zum Entfernen von localStorage findet.

Verwandte Themen