Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Implementation of magic link login feature with...
Search
thori
October 08, 2019
Programming
640
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Implementation of magic link login feature with sorcery gem
thori
October 08, 2019
Other Decks in Programming
See All in Programming
TiDB Cloudのカスタムコントローラーによるオートスケール対応
takaidohigasi
0
140
Ghostty + Neovimで作る 透明でカッコ良い開発環境
j341nono
0
150
[ハンズオン]AIへの指示だけで「五目並べ」を作ってみよう
satoshi256kbyte
1
320
マイコン向けの軽量Ruby「PicoRuby」で各種デバイスを制御するネイティブアプリの実現手法
bash0c7
0
470
Are APIs Still Relevant in the AI Era?
soyuka
0
400
mrbgem 三角測量 開発
ogom
0
180
世界の中心で、AI(App Intents)をさけぶ ー App Intents中心設計の実践ガイド
touyou
0
760
仕様駆動開発による爆速プロダクト開発 / Bakusoku Spec Driven Development
kobakei
0
160
スマートフォンでモールス信号を送受信する 〜スマートフォンのLEDとカメラで作る光通信の設計と実装〜
atsuki_seo
0
220
テストを司るデーモンに会いに行く 〜隔離した仮想マシンでテストを通すまで〜
h1d3mun3
1
600
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
840
選挙速報を多くのユーザーへ 届ける Live Activities 設計
hamayokokuririn
0
210
Featured
See All Featured
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Paper Plane (Part 1)
katiecoart
PRO
2
11k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
590
Designing for Timeless Needs
cassininazir
1
510
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
250
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
330
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
240
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
570
Un-Boring Meetings
codingconduct
0
440
Transcript
パスワードいらず、 sorceryでマジックリンクメールログイン 2019/10/9 堀 巧
Profile 堀 巧 / Takumi Hori テックリード@株式会社ライボ Ruby on Rails、Scala、Angular、 CakePHP、Docker、Vue.js
GitHub: @thori0908 Twitter: @hori_engineer 2
JobQ キャリアや転職に特化した匿名相談サービス • キャリアに関する相談 例、エンジニアになるか迷ってま す。。 • 企業の口コミ 例、あの会社の年収は? 社風は?
https://job-q.me 3
さらなる成長のためCakePHP2系からRailsへ移行中 色々あります手伝ってください... • CakePHP2系からRuby on Railsへ • jQuery廃止してVue.jsへ • インフラもEC2からECSへ
(dockerコンテナ化) • 仕様も変更 ◦ 使っていない機能削除 ◦ 使いやすいadmin画面に改善 4
エンジニア募集中! 5
admin画面のパスワード認証を楽にしたい パスワードあり • 簡単なパスワードにしてしまう 例、password, abcd1234 • パスワード管理ツール使う パスワードなし •
覚えなくて良い • セキュリティに強い • 探さなくて良い 6
マジックリンクメールで、 できます! 7
マジックリンクメールと は? 8
マジックリンクメールの仕組み • ユーザー登録後、フォームにemailを入力して送信する • マジックリンク付きメールが送られる • マジックリンクをクリックするとログインできる 9
どう実装するか 10
ユーザーとサーバーのやりとり マジックリンクメール click GET /login POST /login GET /auth/:token ログインフォーム
ログイントップ submit 送信完了画面 ユーザー側 サーバー側 11
必要なカラムをmigration • users.magic_login_token ◦ マジックリンクのtoken • users.magic_login_token_expires_at ◦ tokenの期限 •
users.magic_login_email_sent_at ◦ ログインメールの送信時刻 12
実装 GET /login 13
実装 POST /login • emailでDBからuserを取得 • token発行、tokenの期限設定 • ログインメールを送ってから、十分時間が立っているか ◦
hammering protectionという。(らしい • マジックリンクメールを送信 14
実装 GET /auth/:token • tokenでDBからuserを取得 • userのmagic_login_tokenとmagic_login_token_expires_at をNULLにする ◦ tokenは一度だけ使用できる
◦ セキュリティのため • ログイントップへリダイレクト 実装おしまい。 15
sorceryのsubmodule が便利です! (Readmeはないようですが作者の記事があります。 https://qiita.com/tonishi/items/832dbd6c1a0a012519fd 16
sorceryのsubmodule MagicLoginを使う • configファイル ◦ マジックログインに使うメールを指定 ◦ tokenの有効時間設定 • 必要なカラムを追加するmigrationファイル用意
◦ magic_login_token ◦ magic_login_token_expires_at ◦ magic_login_email_sent_at 17
sorceryの便利メソッド • deliver_magic_login_instructions! ◦ hammering protection ◦ ログインtoken発行、token期限指定 ◦ マジックリンクメール送信
• load_from_magic_login_token ◦ tokenでuserモデルを取得 ◦ tokenの期限をチェック • generate_magic_login_token ◦ token発行 18
運用時の懸念 19
運用時の問題 開発時運用 • 開発環境でメールを送信して、受け 取るのが面倒 ->ログにメールの内容を吐き出す 本番時運用 • メールが送られなくなったら、ユー ザーはログインできない
->スパム認定されないよう用心 20
まとめ • マジックリンクログインでパスワード管理から解放される • マジックリンク付きのメールを送るだけ • sorceryを使うと便利 21
おまけ passwordlessというgemでも実装できるらしい。 https://github.com/mikker/passwordless passwordlessはdeviseと併用できないらしい https://github.com/mikker/passwordless/issues/9 22