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
Implementation of magic link login feature with...
Search
thori
October 08, 2019
Programming
1
620
Implementation of magic link login feature with sorcery gem
thori
October 08, 2019
Tweet
Share
Other Decks in Programming
See All in Programming
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
420
Compose Multiplatform × AI で作る、次世代アプリ開発支援ツールの設計と実装
thagikura
0
170
テストカバレッジ100%を10年続けて得られた学びと品質
mottyzzz
2
610
為你自己學 Python - 冷知識篇
eddie
1
350
Cache Me If You Can
ryunen344
2
4k
Reading Rails 1.0 Source Code
okuramasafumi
0
250
Android端末で実現するオンデバイスLLM 2025
masayukisuda
1
170
個人軟體時代
ethanhuang13
0
330
RDoc meets YARD
okuramasafumi
4
170
JSONataを使ってみよう Step Functionsが楽しくなる実践テクニック #devio2025
dafujii
1
640
AIと私たちの学習の変化を考える - Claude Codeの学習モードを例に
azukiazusa1
11
4.4k
Navigating Dependency Injection with Metro
zacsweers
3
3.5k
Featured
See All Featured
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
930
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.1k
Navigating Team Friction
lara
189
15k
Writing Fast Ruby
sferik
628
62k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.6k
How STYLIGHT went responsive
nonsquared
100
5.8k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
580
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
113
20k
The World Runs on Bad Software
bkeepers
PRO
70
11k
Automating Front-end Workflow
addyosmani
1370
200k
Site-Speed That Sticks
csswizardry
10
820
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