LoginSignup
22
19

More than 5 years have passed since last update.

RevelでOAuth2認証をしてGithub APIを使う

Last updated at Posted at 2014-04-21

go-github

googleがgo-githubというgithub clientを作っているのでこれを使ってみます。

実装

ログインリンク生成

「The go-github library does not directly handle authentication.」とのことで、
認証はgoauth2などを使う必要があります。

# Routes
GET     /                                       App.Index
*       /:controller/:action                    :controller.:action

があるとして、

// app/controllers/app.go
import (
    "code.google.com/p/goauth2/oauth"
    "github.com/google/go-github/github"
    // ...
)

var GITHUB = &oauth.Config{
    ClientId:     "***",
    ClientSecret: "******",
    AuthURL:      "https://github.com/login/oauth/authorize",
    TokenURL:     "https://github.com/login/oauth/access_token",
    RedirectURL:  "http://localhost:9000/App/Auth",
}

// ...

func (c App) Index() revel.Result {
    url := GITHUB.AuthCodeURL("")
    return c.Render(url)
}
<a href="{{.url}}">ログイン</a>

のようにすると、ログイン用のリンクが生成できます。
ここで実際に使われているのはClientIdとAuthURLで、RedirectURLはつけた場合に使われます。

トークンの取得

func (c App) Auth(code string) revel.Result {
    token, _ := &oauth.Transport{Config: GITHUB}.Exchange(code)
    accessToken := token.AccessToken
    // ...
}

ログインリンクを押して認証されると、githubからRedirectURLにリダイレクトされてきます。
そのとき、codeというパラメータが来るので、それを引数にしてExchangeすると、codeとClientIdとClientSecretが送信され、アクセストークンが取得できます。

APIを使う

アクセストークンがあると以下のようにしてAPIを使えます

transport = &oauth.Transport{
    Token: &oauth.Token{AccessToken: accessToken},
}
client := github.NewClient(transport.Client())
repos, _, _ := client.Repositories.List("octocat", nil)
for  _, repo := range repos {
    fmt.Println(*repo.Name)
}

// 以下のようなログが出る

// git-consortium
// Hello-World
// octocat.github.io
// Spoon-Knife

APIの詳しい使い方はこちら

まとめ

RevelでGithub APIを使うときは、goauth2で認証してアクセストークンを取得し、go-githubでAPIを呼びましょう

22
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
19