概要
Patreon には OAuth の仕組みがありこれを使えば Patreon のサーバ情報に API を使ってアクセスすることができます
今回は OAuth を実現するためのログイン画面の使い方から OAuth 後の API の呼び出しまで基本的な流れを試してみました
環境
- macOS 10.14
- Ruby 2.5.1p57
- patreon-ruby 0.5.0
クライアントアプリ作成
まずは OAuth 用のクライアントアプリを作成しましょう
このページから作成できます
コールバック用の URL は localhost で動作させるアプリを指定します
クライアントを作成すると「Client ID」と「Client Secret」が取得できるのでメモしておきましょう
ライブラリインストール
- bundle init
- vim Gemfile
gem "sinatra"
gem "patreon"
bundle install --path vendor
アプリ作成
今回のアプリの流れとしては
- Patreon でログインページへ遷移
- ログインできた場合はコールバック用のページでトークンを取得
- 取得したトークンを使って Patreon の情報を取得
になります
ログイン画面の作成
まずは Patreon のログイン画面に遷移させるページを作成します
- vim app.rb
require 'sinatra/base'
class TestOAuth < Sinatra::Base
get '/login' do
erb :login
end
end
/login
にアクセスした場合にログイン画面に遷移するリンクを表示します
- mkdir views
vim views/login.erb
<html>
<head>
</head>
<body>
<a href="https://www.patreon.com/oauth2/authorize?response_type=code&client_id=0xmmvlIcKC0PAhdZHdQ31myNO1qPD4MDQBqHOLoZQ19n5DCmfupfyZdlhwv8ikMe&redirect_uri=http://localhost:9292/callback">login</a>
</body>
</html>
Patreon のログイン画面へのリンクにはフォーマットが決められており https://www.patreon.com/oauth2/authorize
に対して response_type
と client_id
と redirect_url
をパラメータに付与してリクエストします
ここで client_id
は先程クライアント作成時にメモしておいた「Client ID」を記載してください
また redirect_url
もクライアントアプリを作成するときに指定した URL を指定してください
間違っている場合ログイン画面が表示されません
コールバック用のページの作成
ログインに成功した場合に呼び出されるコールバック用のページを作成します
app.rb
にコールバック用のリクエストを受け付けるルーティング /callback
を追加します
- vim app.rb
require 'sinatra/base'
require 'patreon'
class TestOAuth < Sinatra::Base
get '/login' do
erb :login
end
get '/callback' do
client_id = '0xmmvlIcKC0PAhdZHdQ31myNO1qPD4MDQBqHOLoZQ19n5DCmfupfyZdlhwv8ikMe'
client_secret = 'Xex5ENhpLeZwv7UdZWBF2HS6bLqwE6cUYQJVkQWevcBMBc2bINhKKeh-l069Uypq'
redirect_url = 'http://localhost:9292/callback'
oauth_client = Patreon::OAuth.new(client_id, client_secret)
tokens = oauth_client.get_tokens(params['code'], redirect_url)
api_client = Patreon::API.new(tokens['access_token'])
user = api_client.fetch_user()
@user_data = user.data
erb :callback
end
end
client_id
, client_secret
は作成したクライアントのものを指定してください
その 2 つからトークンを取得するための oauth_client
を作成します
コールバックされたページには code
というパラメータが付与されて呼び出されます
その code と redirect_url
そして oauth_client
を使って get_tokens
メソッドを呼び出すことでトークン情報を取得することができます
トークンにはいくつか種類がありますが API をコールするために必要なのは access_token
になります
ハッシュとして受け取れるので access_token
にアクセスしましょう
あとはトークンを元に Patreon::API
で API をコールするためのクライアントを作成し fetch_user
などのメソッドをコールすれば OK です
今回は取得したデータをテンプレートに渡してそちらでアイコンと名前を表示します
vim views/callback.erb
<html>
<head>
</head>
<body>
<h1><%= @user_data.full_name %></h1>
<img src="<%= @user_data.thumb_url %>">
</body>
</html>
動作確認
- bundle exec rackup config.ru
でアプリを起動しましょう
あとは localhost:9292/login
にアクセスするとログインへのリンクが表示されるのでそれを踏み Patreon のログイン画面でログインすればユーザ情報が表示されるはずです
最後に
Patreon の OAuth 機能を使ってログインから情報を取得するまでの基本的な流れを紹介しました
OAuth 自体に特に難しかった点はなかったのですが、Ruby のクライアントライブラリの使い方などは知っておく必要がありそうです
公式に Sinatra の OAuth のサンプルもあったのでそれも参考にすると良いかもしれません
今回使用したクライアントアプリはすでに削除しているので client_id
や client_secret
は使えませんのでご注意ください
0 件のコメント:
コメントを投稿