$30 off During Our Annual Pro Sale. View Details »

ゲスト支援における認証状態管理で気を付けたこと

Avatar for Tadashi Nakajima Tadashi Nakajima
December 13, 2025
9

 ゲスト支援における認証状態管理で気を付けたこと

株式会社CAMPFIREにて、2025年12月にリリースされたエクスプレス支援機能にまつわる発表資料。

Avatar for Tadashi Nakajima

Tadashi Nakajima

December 13, 2025
Tweet

Transcript

  1. 自己紹介 中島 禎(ナカジマ タダシ) 株式会社CAMPFIRE 2024 年10 月入社 / 5 社目

    ソフトウェアエンジニア(BE メイン) 趣味:漫画、アニメ(ガチアクタにハマり中) GitHub: @tadasi / X: @tadas1n 会社ではこんな感じで楽しくやってます
  2. 機能概要① iPhone / Safari でのみ利用できる ユーザーが未ログイン状態で、Apple Pay の決済手段を選択できる クレジットカード・メールアドレスな どの個人情報は

    Apple Pay のハーフ モーダルを通じて連携される 電源ボタンをダブルクリックすること でエクスプレス決済が行われ、簡単に 支援できる!
  3. ゲスト認証管理の実装サンプル①:ゲスト認証モジュール ゲスト認証に関する関心事を Concern に切り出し、必要なメソッドの呼び出しで利用できるようにした 1 module GuestAuthentication 2 extend ActiveSupport::Concern

    3 4 included do 5 # devise のヘルパーメソッドである current_user を直接上書くようなことはせず、排他的に認証情報を引けるようにした 6 def current_user_or_guest 7 return current_user if current_user 8 return unless session[:guest_token] 9 10 GuestAuthToken.find_valid_guest(token: session[:guest_token]) 11 end 12 end 13 end
  4. ゲスト認証管理の実装サンプル②:セッションの排他制御 ゲスト認証状態とログイン認証状態の排他制御を行い、共存させないようにした 他にも、API 単位で適宜必要な制御を加えた 1 class BaseController < ActionController::API 2

    before_action :delete_guest_auth_session_when_expired 3 before_action :delete_guest_auth_session_when_logged_in 4 5 protected 6 7 def delete_guest_auth_session_when_expired 8 ::Guests::AuthSession.new(session).delete_when_expired 9 end 10 11 # ログイン状態との排他制御を行う - ログイン認証とゲスト認証が共存する場合は、ゲスト認証を削除しログイン認証を優先させる 12 def delete_guest_auth_session_when_logged_in 13 ::Guests::AuthSession.new(session).delete if user_signed_in? 14 end 15 end