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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Cookie

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

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

リダイレクト

プログラムの入力元や出力先を通常とは別の場所に転送させることをリダイレクトと呼びます。

Q&A

解決済

1回答

1681閲覧

Go(golang)でcookieを保持したままredirectさせたい

MiSe

総合スコア8

Cookie

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

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

リダイレクト

プログラムの入力元や出力先を通常とは別の場所に転送させることをリダイレクトと呼びます。

0グッド

0クリップ

投稿2017/11/15 11:45

###前提・実現したいこと
golangを使用して、既定のURLにアクセスがあった場合に、あるAPIを叩いてcookie情報を取得し、
それを保持したまま、別のページにredirectさせたいです。

###発生している問題・エラーメッセージ
別のページへredirectさせることはできたものの、cookieが保持出来ておらず、
正常な動作とならない

###該当のソースコード
gojiパッケージを使用しており、goji.Get("/hoge/huga", h.redirect())で待ち構えて、
外部からhttp://~/hoge/huga/~へのアクセスがあった場合に、下記の処理に入る形になっています。

package redirector import ( "flag" "net/http" ) func (h Handler) redirect() http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {     // APIを叩いてリダイレクト先URLと、認証用のcookieを取得 redirectURL, redirectCookie, err := h.service.GetRedirectURL(r) if err != nil { return } http.SetCookie(w, redirectCookie) // redirectURL(外部サイト)にリダイレクトするものの、cookie情報が保持できていない http.Redirect(w, r, redirectURL, http.StatusSeeOther) })

###試したこと
下記のようなhtmlを作成してローカルに配置し、
http.Redirect(w, r, redirectURL, http.StatusSeeOther)
のredirectURLをそのhtmlに向けてみましたが、cookieの値が取れなかったことや、
redirect先のページのログを確認し、cookieが渡ってきていないことは確認しています。

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <meta charset="utf-8" /> <script type="text/javascript"> function onload() { var cookies = document.cookie; document.getElementById("msg").innerHTML = "Cookieの内容:" + cookies; } </script> </head> <body onload="onload();"> <div id="msg"></div> </body> </html>

また、調べている中で、net/httpのcookiejarを使用すれば保持が出来るという情報も
見つけはしたのですが、現状の上記ソースをどのように修正すれば適用できるかがわからず
といった状態です。

なお、gojiの使用が必須事項ということではないので、
方法があるようでしたら、他パッケージでも問題ありません。

###補足情報(言語/FW/ツール等のバージョンなど)
使用言語:golang
使用している外部パッケージ:goji

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

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

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

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

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

ikedas

2017/11/16 01:29

redirectURLのパスはサーバが送出したcookieのPathとマッチするでしょうか (Pathが「/hoge/huga/」のとき、redirectURLが「http://……/hoge/huga/piyo」ならマッチする、「http://……/hoge/piyo」であればマッチしない)。
MiSe

2017/11/20 04:42

返答が遅くなりすみません。結果的にご指摘いただいたPathの問題と、ほかの個所で問題があり、呼び出し先のAPIの仕様を一部変更する等して解決しました。ありがとうございました。
guest

回答1

0

自己解決

根本的な解決ではありませんが、解決したため記載します。

ikedas様に指摘いただいたPathが異なっていたという問題と、
cookieのDomainが異なっていたことが原因のようでした
(localのhtmlで取れなかった件もそれが原因でした)。

ですが、そもそも、APIを叩いてredirect先のURLとcookieを取得してそこにredirectするのではなく、
そのAPIのURLにredirectすべきであることが判明しました。
仕様を取り違えておりました。

そのように上記ソースを修正したところ、期待通りの動作をしたため、当件はクローズします。

投稿2017/11/20 04:50

MiSe

総合スコア8

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問