2016-05-18 6 views
4

React/Redux SPAアプリを開発していますので、承認が必要です。私はdevise_token_auth gemが動作するRailsバックエンドを持っています。(Reactアプリで)私はバックエンドによって私に応答したトークンを保存する必要があります。ただし、トークンはresponse.headersから利用できます。どうして? CORSはバックエンド側で機能的に設定されているので、問題ではないと確信しています。Javascript/Railsの承認フェッチヘッダー

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

が証明:固定

enter image description here

+0

トークンをヘッダーに追加するのではなく、sign_in応答本体に戻すことをお勧めします。セキュリティの観点からは利点はありません。 –

+0

@BlairAnderson私はdevise-token-authを使用しています。そのための設定オプションが見つかりません(私はmonkeypatchしたくありません)。それでも、JSのヘッダーがすべて見えないのは非常に奇妙なことです。まず最初にそれを修正したいと思います。しかし、リプレイのおかげで:) –

答えて

0

コードとスクリーンショットを見てみましょう。問題はバックエンド側にありました。私は私のラックCORS初期化子でこれを持っていた:

これに変え
headers: :any,                           
methods: [:get, :post, :put, :patch, :delete, :options, :head] 

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

すべてが今取り組んでいる:) devise_token_authのソースコードを見たときに はそれを得ました。