2016-09-09 5 views
0

React-Reduxを使用してWebappを開発し、別のドメインのnodejsのAPIにリクエストしています。セッションにCookieが追加されていません

ユーザーにログインするには、APIに証明書を送信します。このAPIは、証明書を検証し、JWTとして返信します。私はExpressJSを使用してこれをやろうとしている、私のAPIでのログインパスのように、私が持っている:

res.cookie("my_token", token); 

問題は、クッキーがセッションに追加されていないことです。 Mozillaを使用すると、私はSet-Cookieプロパティが正しいクッキーのヘッダーにあることがわかりますが、私のリソースには表示されません。

また、DHCを使用していくつかのテストを行いました.DHCを使用すると、Cookieはセッションクッキーに正常に保存されます。

私は私のウェブサイトおよびAPIの両方で

res.header("Access-Control-Allow-Origin", "*"); 
res.header("Access-Control-Allow-Credentials", true); 
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 

を持っています。ウェブサイトでは、リクエストをするために反応モジュールのAxiosを使用しています。 apiでは、Cookieパーサーを使用してCookieを処理しています。

res.cookie("session_token", token, { domain: ".mydomain.com" }).send(response); 
+0

どのセッション管理ミドルウェアを使用していますか、より多くのコードを表示できますか? – David

答えて

2

私は角度コードで同様の問題を持っている:これは私の応答は

axios.post(`${ROOT_URL}/login`, creds) 
    .then(res => { /*...*/ }) 
    .catch(err => { /*...*/ }); 

です:

app.use(function(req, res, next) { 
     res.header("Access-Control-Allow-Origin", "*"); 
     res.header("Access-Control-Allow-Credentials", true); 
     res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
     next(); 
    }); 

    const cookieParser = require("cookie-parser"); 
    app.use(cookieParser()); 

    const bodyParser = require("body-parser"); 
    app.use(bodyParser.json({limit: '50mb'})); 
    app.use(bodyParser.urlencoded({limit: '50mb', extended: true})); 

    const morgan = require("morgan"); 
    app.use(morgan('dev')); 

は、これが私の要求である:これらは私のミドルウェア(APIとアプリの両方)です、私が解決したもの

  • お客様からwithCredentials I事axiosを有効にする必要がありますあなたのバックエンドres.header("Access-Control-Allow-Origin", "*");から
  • それを有効にするには、いくつかのオプションが

十分ではありません持っている必要があります。ホストではない返す必要があるので、あなたがこの

res.header("Access-Control-Allow-Origin", req.header('Origin')); 

ような何かを行うことができますアスタリスク、これは開発目的のためだけです。これを後で静的なURLに変更することをお勧めします。

関連する問題