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プロトコルについてはこちらのサイトが詳しかったので読んだらいいと思います。
とりあえず上にあげた部分をちゃんとしたらほぼそのまま使える気がします。そう願っている。
あとはアクセストークンをユーザーごとに保存したりしとけば毎回認証しなくて済むのかな…?
ちなみにこのサンプルではdbという名のメンバ変数に保存していました(一瞬で消える)。罠かな?
今日はこんな感じ。週末なので一気に進められるといいなあ。明日の私に期待大。
ではまた。