Skip to main content
  1. Posts/

Go言語 & RevelでTwitterWebアプリ01

·135 words·1 min

Twitterのサンプルプロジェクトを見てみたわけですが一つ一つ解説するのはちょっとめんどくさいなって思ったので割愛します。

認証の部分は一部変えたら使いまわせるんじゃないかと思ったので変える部分をメモっておきますね。

全部app.goです。

・コンシューマーキーとコンシューマーシークレット

//11~19行目
var TWITTER = oauth.NewConsumer(
	"VgRjky4dTA1U2Ck16MmZw",//ここと
	"l8lOLyIF3peCFEvrEoTc8h4oFwieAFgPM6eeTRo30I",//ここ
	oauth.ServiceProvider{
		AuthorizeTokenUrl: "https://api.twitter.com/oauth/authorize",
		RequestTokenUrl:   "https://api.twitter.com/oauth/request_token",
		AccessTokenUrl:    "https://api.twitter.com/oauth/access_token",
	},
)

Twitterのdeveloperサイトからもらってくるやつですね。

ついでに言うとtokenUrlを変えたらTwitter以外のOAuth採用してるサービスでも使えるんじゃないですかね多分。

 

・リダイレクトURL

//73~95行目
func (c Application) Authenticate(oauth_verifier string) revel.Result {
	user := getUser()
	if oauth_verifier != "" {
		// We got the verifier; now get the access token, store it and back to index
		accessToken, err := TWITTER.AuthorizeToken(user.RequestToken, oauth_verifier)
		if err == nil {
			user.AccessToken = accessToken
		} else {
			revel.ERROR.Println("Error connecting to twitter:", err)
		}
		return c.Redirect(Application.Index)
	}

	requestToken, url, err := TWITTER.GetRequestTokenAndUrl("http://127.0.0.1:9000/Application/Authenticate")//ここ
	if err == nil {
		// We received the unauthorized tokens in the OAuth object - store it before we proceed
		user.RequestToken = requestToken
		return c.Redirect(url)
	} else {
		revel.ERROR.Println("Error connecting to twitter:", err)
	}
	return c.Redirect(Application.Index)
}

自分のサイトの戻ってきてほしいURLに変えましょうね。このサンプルの作りだと

ここに自分のサイトURL/Application/Authenticate

です。

あとはそのままいけんじゃないですかね。

 

そんな感じです。

OAuthプロトコルについてはこちらのサイトが詳しかったので読んだらいいと思います。

OAuthプロトコルの中身をざっくり解説してみるよ

とりあえず上にあげた部分をちゃんとしたらほぼそのまま使える気がします。そう願っている。

あとはアクセストークンをユーザーごとに保存したりしとけば毎回認証しなくて済むのかな…?

ちなみにこのサンプルではdbという名のメンバ変数に保存していました(一瞬で消える)。罠かな?

今日はこんな感じ。週末なので一気に進められるといいなあ。明日の私に期待大。

ではまた。

Related

Go言語 & RevelでTwitterWebアプリ00
·30 words·1 min
Go言語:Revelチュートリアル03~TheFinal~
·89 words·1 min
Go言語:Revelチュートリアル02
·62 words·1 min