omniauth strategies the phantom pain

Post on 21-Feb-2017

451 Views

Category:

Technology

6 Downloads

Preview:

Click to see full reader

TRANSCRIPT

@yimajo

THE PHANTOM PAINOmniAuth Strategies

https://stargzr.net

自己紹介

一人で株式会社キュリオシティソフトウェアをやっています

今城 善矩

https://stargzr.net

StargazerというWebサービスをRailsで つくっています

GitHub, Qiita, SlideShare, Stack Overflowの ★数的なものを全部 合計します

https://stargzr.net

インタビューされてもいいよという人/組織を 探しています

インタビューの数字(2015.9.27現在)

• Pocketの後で見る数 255

• ツイート数 210

• はてぶ数 147

• Facebookいいね!数 290

人が欲しいと思うものを作れ

https://stargzr.net

今週 Stargazerは Stack Overflowと

日本語版Stack Overflowの スコアも対応しました

\(^o^)/

https://stargzr.net

スコアってどうやって取得してんの?

https://stargzr.net

• OAuthを使っているサービスを利用してidと必要であればaccess_tokenを取得

• 各サービスのAPIを呼び出して★的なものを取得

https://stargzr.net

OmniAuthというOAuthを抽象化してくれるgemが 超絶便利!!!!

https://stargzr.net

各サービス(provider)ごとの違いはStrategyパターンでそれぞれのgemによって吸収される

https://stargzr.net

Strategyに対応したgemの作り方は 細かくドキュメント化されていないの

に登録されているものだけで 200個ぐらいある!!!

https://github.com/intridea/omniauth/wiki/List-of-Strategies

https://stargzr.net

当然Stack Overflowもomniauth-stackexchangeというgemがあっので使ってみた!!!

_人人人人人人人_ > 突然の死 < ‾Y^Y^Y^Y^Y^Y‾

https://stargzr.net

なぜエラー?• Stack OverflowはStack Exchangeアカウントが親になっている

• 例えばStack Overflowアカウントを使っていても、日本語版Stack Overflowアカウントは有効化していなければ例外が起きてた

Stack Exchange

日本語版 Stack Overflow

Stack Overflow

有効化無効化

例外

https://stargzr.net

安心して下さい

https://stargzr.net

Pull Request出してマージ済みです

\(^o^)/

https://stargzr.net

ドキュメントがあんまり詳細じゃないのに200個もStrategy gemsがあると中には適切な実装じゃないgemもある!

https://stargzr.net

どういう対処が適切か

認可画面表示

client_id scope

redirect_uri state

ID/PW

認可コード発行認可コード

access_token要求

認可コード client_id

client_secret redirect_uri

access_token access_token 発行

連携リンクを クリック

ID/PW入力

https://stargzr.net

OmniAuthのStrategy作るとき• プロバイダのToken URLなどを仕込む

• Request PhaseとCallback Phaseを設定

• レスポンスのJSONはプロバイダ毎に違うのでそれ用に処理

https://github.com/intridea/omniauth/wiki/Strategy-Contribution-Guide

https://stargzr.net

OmniAuthのStrategy作るときの 注意点まとめ

• callback_phaseの例外はStandardErrorならrescueされる

• 独自の例外作る場合callback_phaseをoverrideして独自の例外をrescueしてfail!メソッドを呼ぶ

https://stargzr.net

具体例

def callback_phase super rescue NotRegisteredForStackExchangeSiteError => e fail!(:user_is_not_registered, e) end

宣伝最近、iOSアプリ開発の技術メンター業務をしています

• Swift/Objective-Cのコードレビューをします

• 設計についてアドバイスします(GitHubやSkype)

クライアントの声を紹介http://curiosity.co.jp/trenders/

こちらからは以上です\(^o^)/

top related