質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

7912閲覧

クロスドメインにてレスポンスで返るSet-Cookieが次回リクエスト時にCookieとしてセットされない

momotaro98

総合スコア19

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

1グッド

3クリップ

投稿2018/06/30 15:48

編集2018/07/01 04:30

クライアントにてaxiosを利用しクロスドメインとしてホストと異なるサーバへリクエストのやり取りをしようとしています。

ログインのリクエストにてサーバ側からはSet-Cookieが入ったレスポンスがやってきていることをブラウザで確認しています。

しかし、その後のリクエストにて、ヘッダーにCookieが入りません。

下記のIssueリンクのようにwithCredentials: trueをクライアント側に設定し、res.header("Access-Control-Allow-Credentials", true);の設定をNode.jsのサーバ側でも設定してますが、Cookie付きのリクエストをクロスドメインのサーバ側に送信できない状況です。

https://github.com/axios/axios/issues/876

どのようにすればCookieをサーバ側へ送信できるのかご教授願いたいです。

環境
OS: macOS Sierra 10.12.1
ブラウザ: Chrome バージョン: 67.0.3396.87

ソースコードは下記のようになります。

クライアント側 (localhost:9000)

axios.defaults.withCredentials = true; axios.post('http://localhost:3000/sessionLogin', { idToken: idToken }).then(function (response) { console.log(response) // Set-Cookieがブラウザで確認できる axios.get('http://localhost:3000/profile', { // リクエストにCookieがセットされない }).then(function (response) { console.log(response) }).catch(function (error) { console.log(error) }) }).catch(function (error) { console.log(error) })

サーバ側 (localhost:3000)

var app = express(); app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json()); app.use(cookieParser()); app.use((req, res, next) => { res.header('Access-Control-Allow-Origin', req.headers['origin']); res.header("Access-Control-Allow-Credentials", true); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); next(); }); app.post('/sessionLogin', (req, res) => { // Get the ID token passed and the CSRF token. const idToken = req.body.idToken.toString(); // Set session expiration to 5 days. const expiresIn = 60 * 60 * 24 * 5 * 1000; admin.auth().createSessionCookie(idToken, {expiresIn}).then((sessionCookie) => { // Set cookie policy for session cookie. const options = {domain: 'localhost', maxAge: expiresIn, httpOnly: true, secure: true}; res.cookie('session', sessionCookie, options); res.end(JSON.stringify({status: 'success'})); }, error => { res.status(401).send('UNAUTHORIZED REQUEST!'); }); }); // Whenever a user is accessing restricted content that requires authentication. app.get('/profile', (req, res) => { const sessionCookie = req.cookies.session || ''; // Verify the session cookie. In this case an additional check is added to detect // if the user's Firebase session was revoked, user deleted/disabled, etc. if (sessionCookie === '') { console.log('No sessionCookie...'); } else { console.log(sessionCookie); } admin.auth().verifySessionCookie( sessionCookie, true /** checkRevoked */).then((decodedClaims) => { res.end(JSON.stringify({profile: 'Your profile is here!!!'})); }).catch(error => { }); });
ttlg👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tanat

2018/06/30 18:42

ブラウザ側で実際にセットされたcookieのドメインやパスを確認するとどうなっていますか?
momotaro98

2018/07/01 02:04

ドメイン: 空文字、パス: "/" でドメインは空文字になっています。他は、「Name: 値あり、Value: 値あり、Max-Age: 値あり、HTTP、Secure: チェックあり、SameSite: 空文字」です。
momotaro98

2018/07/01 03:12

Node.js側でcookieに`domain: 'localhost:3000` を指定し、Cookieのドメインを対応サーバのものにしたのですが、変わらずです。
momotaro98

2018/07/01 03:14

domain: 'localhost` とポート指定しない場合も同様でした。
guest

回答1

0

自己解決

ブラウザの問題とわかりました。解決済みです。

投稿2020/02/21 08:50

momotaro98

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問