Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Implementation of magic link login feature with sorcery gem
thori
October 08, 2019
Programming
1
380
Implementation of magic link login feature with sorcery gem
thori
October 08, 2019
Tweet
Share
Other Decks in Programming
See All in Programming
パスワードに関する最近の動向
kenchan0130
1
330
There's an API for that!
mariatta
PRO
0
110
NestJS_meetup_atamaplus
atamaplus
0
210
Lookerとdbtの共存
ttccddtoki
0
630
atama plusの開発チームはどのように「不確実性」に向き合ってきたか〜2022夏版〜
atamaplus
3
610
Scaling Productivity- How we have improved our dev experience
sockeqwe
1
120
Computer Vision Seminar 1/コンピュータビジョンセミナーvol.1 OpenCV活用
fixstars
0
170
Carp言語さわってみた 〜鯉を取り戻せ編〜
tsin45
0
100
アジャイルで始める データ分析基盤構築
nagano
1
900
設計の考え方とやり方
masuda220
PRO
54
30k
Babylon.jsで作ったsceneをレイトレーシングで映えさせる
turamy
1
210
アジャイルで不確実性に向き合うための開発タスクの切り方
tanden
4
1.1k
Featured
See All Featured
Bootstrapping a Software Product
garrettdimon
296
110k
How to train your dragon (web standard)
notwaldorf
60
3.9k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
269
12k
The Brand Is Dead. Long Live the Brand.
mthomps
46
2.7k
Designing the Hi-DPI Web
ddemaree
272
32k
How New CSS Is Changing Everything About Graphic Design on the Web
jensimmons
213
11k
How To Stay Up To Date on Web Technology
chriscoyier
780
250k
Designing Experiences People Love
moore
130
22k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
7
1.1k
Designing on Purpose - Digital PM Summit 2013
jponch
106
5.7k
Atom: Resistance is Futile
akmur
255
20k
Mobile First: as difficult as doing things right
swwweet
213
7.6k
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