3

バックエンド API サーバーの /login 機能をテストできるようにプログラムを作成します。スーパーエージェントを使用してサーバーにリクエストを送信すると、ログイン セッションが実際のブラウザ ログイン セッションとは関係がないことを除いて、すべて正常に動作します。

/login に POST すると、Cookie 値を設定するように指示する「Set-Cookie」フィールドを含む応答ヘッダーが表示されます。この Cookie を使用すると、バックエンド サーバーにログインしたままにすることができます。しかし、どうやらスーパーエージェントは POST /login が成功しても Cookie の値を設定しなかったようです。

では、セッション/クッキー情報をブラウザと共有するにはどうすればよいですか?

var request = require('superagent');

request.post('http://localhost:3000/login')
  .send({email: 'test@gmail.com', password: 'test@gmail.com'})
  .end(function(err, res){
    console.log(err)
    console.log(res.header)
  })
4

1 に答える 1

3

以外のオリジンからこのリクエストを行っていると想定しています。localhost:3000そうでない場合、ブラウザはすでにリクエストの Cookie を送信しているはずです。

Superagent はXMLHttpRequest、ブラウザ内のオブジェクトを使用して http リクエストを作成します。デフォルトでは、クロスオリジン リクエストは Cookie を送信しません。Cookie/認証ヘッダーを送信するには、リクエストのプロパティを にXMLHttpRequest設定する必要があります。Superagentはこれを簡単にします。リクエストに応じてメソッドを使用するだけです:withCredentialstrue.withCredentials()

var request = require('superagent');

request.post('http://localhost:3000/login')
  .send({email: 'test@gmail.com', password: 'test@gmail.com'})
  .withCredentials()
  .end(function(err, res){
    console.log(err)
    console.log(res.header)
  })
于 2015-07-01T16:36:08.687 に答える