2016-05-18 9 views
4

Also ich entwickle React/Redux SPA App und ich möchte eine Autorisierung arbeiten. Ich habe Rails Backend mit devise_token_auth gem arbeiten und (in React app) Ich muss ein Token speichern, das mir vom Backend beantwortet wurde. Keine Tokens sind über response.headers verfügbar. Warum? CORS sind direkt auf der Backend-Seite eingerichtet, also bin ich mir sicher, dass das nicht das Problem ist. Werfen Sie einen Blick auf den Code und Screenshot:Javascript/Rails Authorization Header holen

let config = { 
    method: 'POST', 
    headers: { 
    "Accept": "application/json", 
    "Content-Type": "application/json" 
    }, 
    body: JSON.stringify(creds) // { email: '[email protected]', password: 'asdasdasd' } 
} 

return dispatch => { 
    dispatch(requestLogin(creds)) 
    return fetch('http://localhost:3000/auth/sign_in', config) 
    .then((response => { 
     response.headers.forEach((el) => console.log(el)) 
    })) 
} 

console.log:

console.log from code above

Beweis dafür, dass Browser sieht Header:

enter image description here

+0

Ich würde nur empfehlen, das Token in der Nachricht sign_in response zurückzugeben, anstatt zu versuchen, es der Kopfzeile hinzuzufügen. Vom Sicherheitsstandpunkt aus hat dies keinen Vorteil. –

+0

@BlairAnderson ich benutze devise-token-auth und ich kann keine Konfigurationsoption dafür finden (ich möchte nicht monkeypatch). Trotzdem ist es sehr seltsam, nicht alle Header in JS zu sehen, und das würde ich zuerst um des guten Willens willen beheben. Aber danke für die Wiederholung :) –

Antwort

0

fixiert. Das Problem war auf der Backend-Seite. Ich hatte in meinem Rack-cors initializer:

headers: :any,                           
methods: [:get, :post, :put, :patch, :delete, :options, :head] 

dazu geändert:

headers: :any, 
expose: ['access-token', 'expiry', 'token-type', 'uid', 'client'], 
methods: [:get, :post, :put, :patch, :delete, :options, :head]                        

alles funktioniert jetzt :) es hat, wenn man durch devise_token_auth Quellcode suchen.