Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
久々にコードを書いてOmniauthでハマった話
Search
Hiroaki Ninomiya
March 24, 2021
Programming
0
960
久々にコードを書いてOmniauthでハマった話
Fukuoka.rb 200回 LT大会 (#202)
https://fukuokarb.connpass.com/event/206956/
Hiroaki Ninomiya
March 24, 2021
Tweet
Share
More Decks by Hiroaki Ninomiya
See All by Hiroaki Ninomiya
渋谷アジャイルコミュニティへの想い #shibuyagile
treby
0
410
IM@Study活動紹介
treby
1
510
全ての雑用を、生まれる前に消し去りたい
treby
0
470
Webエンジニアからデータエンジニアへ転向している話 #pronama
treby
0
360
Rails 6.0の気になった新機能 #shuuumai
treby
1
680
Shinjuku.rbの移り変わりについて、あるいは大規模カンファレンスの知見を募集したい話 #tqrk13
treby
1
150
EMの悩みにフォーカスする #em_izakaya
treby
0
530
この先生きのこるためのエンジニアキャリア戦略パターン #em_meetup
treby
5
2.5k
失敗から学ぶEM方法論 #em_meetup
treby
0
1.4k
Other Decks in Programming
See All in Programming
LLM生成文章の精度評価自動化とプロンプトチューニングの効率化について
layerx
PRO
2
190
macOS でできる リアルタイム動画像処理
biacco42
9
2.4k
ピラミッド、アイスクリームコーン、SMURF: 自動テストの最適バランスを求めて / Pyramid Ice-Cream-Cone and SMURF
twada
PRO
10
1.3k
ActiveSupport::Notifications supporting instrumentation of Rails apps with OpenTelemetry
ymtdzzz
1
250
AWS Lambdaから始まった Serverlessの「熱」とキャリアパス / It started with AWS Lambda Serverless “fever” and career path
seike460
PRO
1
260
A Journey of Contribution and Collaboration in Open Source
ivargrimstad
0
970
Flutterを言い訳にしない!アプリの使い心地改善テクニック5選🔥
kno3a87
1
200
Streams APIとTCPフロー制御 / Web Streams API and TCP flow control
tasshi
2
350
Better Code Design in PHP
afilina
PRO
0
130
シェーダーで魅せるMapLibreの動的ラスタータイル
satoshi7190
1
480
どうして僕の作ったクラスが手続き型と言われなきゃいけないんですか
akikogoto
1
120
距離関数を極める! / SESSIONS 2024
gam0022
0
290
Featured
See All Featured
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
506
140k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.9k
Thoughts on Productivity
jonyablonski
67
4.3k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.4k
GraphQLとの向き合い方2022年版
quramy
43
13k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
Typedesign – Prime Four
hannesfritz
40
2.4k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
131
33k
[RailsConf 2023] Rails as a piece of cake
palkan
52
4.9k
The Art of Programming - Codeland 2020
erikaheidi
52
13k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.8k
Transcript
OmniauthͰϋϚͬͨ 2021/03/24 Fukuoka.rb 200ճLTେձ @treby006
About Me • treby (ͱΕͼʔ) • @treby006 • Shinjuku.rbͷੈ
About Me • ࣮(?)Ԭग़ • Ԭࢢ౦۠/۠ɺେໂాࢢʹ༝ԑ͕͋Γ·͢
About Me • ಠཱܥϕϯνϟʔΩϟϐλϧۈ • ελʔτΞοϓ͖͕ߴͯ͡ग़ࢿଆʹ • ҎલBtoCBtoBͷελʔτΞοϓͰRailsΤϯδχΞ • Rubyք۾ͩͱʮjoker͞Μ͕͍Δͱ͜ʯͰ௨͡Δ͔Βָ
• ITΛऔΓѻ͏͚ͲɺۀͰίʔυॻ͔ͳ͍
About Me • ಠཱܥϕϯνϟʔΩϟϐλϧۈ • ελʔτΞοϓ͖͕ߴͯ͡ग़ࢿଆʹ • ҎલBtoCBtoBͷελʔτΞοϓͰRailsΤϯδχΞ • Rubyք۾ͩͱʮjoker͞Μ͕͍Δͱ͜ʯͰ௨͡Δ͔Βָ
• ITΛऔΓѻ͏͚ͲɺۀͰίʔυॻ͔ͳ͍ => ͚Ͳॻ͖͍ͨ
ίʔυΛॻ͔ͳ͘ͳͬͯ͠·ͬͨਓ͋Δ͋ΔͷΈ • ࠷৽ͷٕज़ΛΩϟονΞοϓͰ͖ͳ͘ͳΔͷͰͳ͍͔ • ٕज़ྗ͕མͪͯ͠·͏ͷͰͳ͍͔ • ࣍ʹస৬ͨ͠ͱ͖ʹ։ൃऀͱͯ͠৯͍ͬͺ͙ΕΔͷͰͳ͍͔ • ͍͔ͭ͠ΩϟϦΞ͕த్ʹͳͬͯ͠·͏ͷͰͳ͍͔ •
ݱײ͕ͳ͘ͳͬͯ͠·͏ͷͰͳ͍͔
ίʔυΛॻ͔ͳ͘ͳͬͯ͠·ͬͨਓ͋Δ͋ΔͷΈ • ࠷৽ͷٕज़ΛΩϟονΞοϓͰ͖ͳ͘ͳΔͷͰͳ͍͔ • ٕज़ྗ͕མͪͯ͠·͏ͷͰͳ͍͔ • ࣍ʹస৬ͨ͠ͱ͖ʹ։ൃऀͱͯ͠৯͍ͬͺ͙ΕΔͷͰͳ͍͔ • ͍͔ͭ͠ΩϟϦΞ͕த్ʹͳͬͯ͠·͏ͷͰͳ͍͔ •
ݱײ͕ͳ͘ͳͬͯ͠·͏ͷͰͳ͍͔
ݱײ͕ͳ͘ͳΔͱԿ͕ྑ͘ͳ͍ͷ͔ • ۀ্ͷೳྗ͕Լ: ࢿݕ౼ͷࡍͷ։ൃྗݟཱͯ(σϡʔσϦδΣϯε) • ར͖͕Ͱ͖ͳ͘ͳ͍ͬͯ͘ͷͰʁ • ઐՈͱͯ͠ίϝϯτ͢Δ༰্͕Γͯ͠͠·͏ͷͰʁ • ͋Δࣄྫʹ৮Εͨ࣌ʹʮࣗͷݴ༿ʯͰͤͳ͍Ͳ͔͠͞
• ͰɺͲ͏͢Δʁ
ͦ͏ͩɺ։ൃ͠Α͏
αΠυϓϩδΣΫτɺ͡Ί·ͨ͠ • ਓͱझຯϓϩμΫτ࡞Γ / ։ൃΛঠ͢ΔཱͪҐஔ • LINEͷϛχΞϓϦ(ࠓεςϧε) / ۙʑ͓൸࿐Ͱ͖Δͱྑ͍ͳ •
جຊతʹθϩ͔Βͷ্ཱͪ͛(1݄ʙ) • ։ൃج൫࡞ΓνʔϜϏϧσΟϯάͰָ͖͍ͯ͠
γεςϜߏਤ
ٕज़ελοΫ • ϑϩϯτ(LIFFΞϓϦ): Vue CLI (webpackerෆ༻) • Next.js on Vercel
• αʔό: Rails 6.1.3 (Ruby 3.0) on Heroku • omniauth • administrate • ridgepole • crono_trigger
ٕज़ελοΫ • ϑϩϯτ(LIFFΞϓϦ): Vue CLI (webpackerෆ༻) • Next.js on Vercel
• αʔό: Rails 6.1.3 (Ruby 3.0) on Heroku • omniauth • administrate • ridgepole • crono_trigger
omniauth • ϚϧνϓϩόΠμͷೝূΛఏڙ͢Δgem • ʮSNSϩάΠϯʯΛ࣮͢Δͷʹྑ͘ΘΕΔΠϝʔδ • ࣮ʹར༻͍ͨ͠ϓϩόΠμ͚ͷϓϥάΠϯ͕ඞཁ • omniauth-twitteromniauth-githubͳͲ •
ཧը໘ͷ؆қϩάΠϯػೳͷͨΊʹ࠾༻ • LINEͷϛχΞϓϦͳͷͰLINEͱੑ͕ߴ͍ • omniauth-line ͱҰॹʹಋೖͯ͠LINEϩάΠϯ࣮ͩʂ
ಋೖ؆୯ • omniauth gemͱ͍͍ͨϓϩόΠμͷgemΛbundleͯ͠ Gemfile gem 'omniauth' gem 'omniauth-line'
ίʔϧόοΫΛड͚͚ΔΑ͏ʹͯ͠ • SessionsController ͱϧʔςΟϯάͷ४උ config/routes.rb get '/auth/:provider/callback', to: 'sessions#callback' post
'/auth/:provider/callback', to: 'sessions#callback' get '/logout', to: 'sessions#destroy', as: :logout
ϩάΠϯඞཁͳActionʹϦμΠϨΫτΛઃఆ AdminController before_action :authenticate_admin def authenticate_admin if current_admin_challenger.nil? redirect_to '/admin/auth/line'
end end
Callback URLͷϗϫΠτϦετొ(LINE)
Α࣮͠ߦͩ
͏·͍͔͘ͳ͍orz
ఆ֎ͷΤϥʔͩͬͨͷͰ • ϧʔςΟϯά͕ؒҧ͍ͬͯΔͷͰͳ͍͔ • typoͳ͍͔ • omniauth-line ͕ϝϯς͞Ε͍ͯͳ͍ͷͰ • omniauth
ͷgem·ͰΈʹ͍ͬͨ
ḷΓண͍ͨͷ • omniauthͷ༷มߋ • 2019ࠒͷมߋͰͨ͠ɻࣗͷແ͞Α…… • എܠ: ੬ऑੑCVE-2015-9284 ରԠΒ͍͠ •
CSRF͞ΕΔϦεΫ͕͋ΔΑ • GETͰ͍͚Δ͔Βҙਤ͠ͳ͍ϩάΠϯͤ͞ΒΕΔΑͶ(ͱ͍͏ཧղ) • ੬ऑੑ͔ͩΒରԠͨ͠ํ͕ྑ͍ • ͪΐͬͱͤྑ͍ͷͰͳ͘ɺຯʹରԠ͕໘
ྑ͘ͳ͍͚ͲɺΦϓγϣϯΛແޮԽͯ͠ରԠ • ੬ऑੑΔΘ͚Ͱ͕͢ɺҰ୴ྑ͍͔ͳɺͱ͍͏அ • ͜ΕͰಈ͖·ͨ͠ config/initializers/omniauth.rb Rails.application.config.middleware.use OmniAuth::Builder do configure
do |config| config.allowed_request_methods = %i[get post] config.silence_get_warning = true end : end
ͪΌΜͱରԠ͢ΔͳΒ • gemͬΆ͍ͷଘࡏ͍ͯ͠Δ: ೖΕΕྑ͍ͱ͍͏Θ͚Ͱͳ͍? • https://github.com/cookpad/omniauth-railscsrfprotection • ҰճϩάΠϯϘλϯ͕͋Δϖʔδʹඈ͢ײ͡ • ϦμΠϨΫτͰPOSTͤ͞Δͷͬͯ͘͠ͳ͍ʁ
• ৄ͘͠ͳ͍ͷͰڭ͍͑ͯͩ͘͞><
·ͱΊ • αΠυϓϩδΣΫτ͍͍ͧ • ݱײɺഓ͍ͬͯͧ͘ʂ • gemͷߋ৽ʹશવ͍͍͚ͭͯͯͳͯ͘ϫϩλ • खΛಈ͔ͯٔ͠ΕΔ͜ͱେࣄ
એ • ϙουΩϟετΛ͍ͬͯΔͷͰྑ͔ͬͨΒௌ͍ͯͶ • ͯ͘͠Ε͍͍ͯͷΑ
Happy Hacking!!