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

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

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

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

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

2227閲覧

golang*nginxでgolangでリダイレクトさせたらパラメーターがつかない

blo

総合スコア13

Go

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

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2021/06/13 12:53

編集2021/06/13 23:49

#Go(Gin)とnginxで外部にパラメーター付きでリダイレクトさせたい
ツイッター認可でログインさせようとしています。
golangのみのhttp://localhost:8080/twitter/loginではログイン処理ができます.
しかし、nginxを通すとhttps://api.twitter.com/oauth/request_tokenで処理が通ってしまいます.

docker

1version: '3' 2services: 3 api: 4 build: ./docker/api 5 container_name: golang 6 volumes: 7 - ./api:/go/src/api 8 networks: 9 - default 10 ports: 11 - 5555:8080 12 command: 'go run server.go' 13 rp: 14 build: ./docker/rp 15 container_name: nginx 16 volumes: 17 - ./nginx:/etc/nginx/conf.d/ 18 ports: 19 - 80:80 20 networks: 21 - default 22 23volumes: 24 db-store: 25

go

1# router.go 2 import ( 3 "github.com/gin-gonic/gin" 4 5 "api/interfaces/controllers" 6 ) 7 var Router *gin.Engine 8 9 func init() { 10 router := gin.Default() 11 12 router.GET("api/twitter/login", func(c *gin.Context) { controllers.TwitterLogin(c) }) 13 router.GET("api/twitter/callback", func(c *gin.Context) { controllers.TwitterCallback(c) }) 14 15 Router = router 16 }

go

1# GET("twitter/login", ~~) 2package controller 3import ( 4 "net/http" 5 "os" 6 "github.com/dghubble/oauth1" 7 "github.com/dghubble/oauth1/twitter" 8) 9 10config := oauth1.Config{ 11 ConsumerKey: os.Getenv("TWITTER_CONSUMER_KEY"), 12 ConsumerSecret: os.Getenv("TWITTER_CONSUMER_SECRET"), 13 Endpoint: twitter.AuthorizeEndpoint, 14} 15requestToken, _, _ := config.RequestToken() 16c.Redirect(http.StatusFound, "https://api.twitter.com/oauth/authenticate?oauth_token="+requestToken)

nginx

1server { 2 listen 80; 3 server_name localhost; 4 5 location /api/ { 6 proxy_pass http://golang:8080/api/; 7 } 8 error_page 500 502 503 504 /50x.html; 9 location = /50x.html { 10 root /usr/share/nginx/html; 11 } 12} 13

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

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

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

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

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

nobonobo

2021/06/13 23:32

省略しすぎてoauth1がどうやって作られたものかがわかりません。 また、「golang」というホスト名はどこに繋がっているのか説明が必要です。 (なんとなくdockerコンテナに「golang」という名前をつけたもの?)
blo

2021/06/13 23:42

失礼しました、 その通りで、htttp://golang:8080/api/は、goで作成したapi側のdockerコンテナにgolangという名前をつけたものです。 oatuth1は下記をimportしてきています `"github.com/dghubble/oauth1"` 上記修正いたします。
blo

2021/06/13 23:49

修正いたしました。修正依頼いただいてありがとうございます。
guest

回答1

0

ベストアンサー

ざっとみて気づいた修正した方がいい点は2つ

  • config.RequestToken()が返すエラーは無視せずにハンドリングしておきましょう。ここでエラーが発生している場合に問題に気づけなくなります。
  • oauth1のライブラリにはexampleコードがあるのでそのコードから逸脱しない様にしましょう。リダイレクト先のURLを自作してはいけません。

以下の様にしてURLを生成してそこにリダイレクトすべき様に思います。

go

1authorizationURL, err := config.AuthorizationURL(requestToken)

他にも問題があるかもしれませんが(TwitterAPIは他人が試すには面倒)そこは頑張って試行錯誤してもらうしかなさそうです。

もし何か問題がある場合はブラウザ開発ツールのネットワークログなどがあると良いと思います。

追記

nginxのproxy_passの書き方に問題がありそうです。
location /api/ {...}これは/api/で始まるURIを対象にブロックルールを適用するということです。
つまり、上記URI対象をproxy_pass先に転送するということになりますが、

nginxのドキュメントによると、proxy_passに「http://ホスト名」だけを書いた場合、リクエストURIのスキームとホスト名だけを書き換えて転送しますが、proxy_passに「http://ホスト名/hoge」等のPath相当を書いてしまった場合、リクエストURIはすべて「http://ホスト名/hoge」に書き換えられます。

おそらくこれが原因だと思われます。

投稿2021/06/15 00:59

編集2021/06/15 01:07
nobonobo

総合スコア3367

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

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

blo

2021/06/16 11:42

ありがとうございます、nginxの書き方に問題ありました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問