セキュリティ系の勉強・その他開発メモとか雑談. Twitter, ブログカテゴリ一覧
本ブログはあくまでセキュリティに関する情報共有の一環として作成したものであり,公開されているシステム等に許可なく実行するなど、違法な行為を助長するものではありません.

【Rails】登録内容がユニークでないユーザへの条件別対応

//

例えば

ユーザが電話番号で仮登録をし、認証のためのURLを生成して返す場合、同じ電話番号を使って再度仮登録の内容をPOSTしてくる場合がある。1時間以内に2回送ってくる人は恐らくイタズラに近い可能性があるのでエラーを返すが、それ以降に再度送ってきた場合、本当に認証のURLを紛失している可能性がある。

処理方法

まずPOSTされた電話番号が既に登録されているか確認する。

user = User.find_or_initialize_by(tel_number: q[:tel_number])

これで既に登録されていた場合はそのレコードを取得できる。

このレコードが新規のものか確認し、そうでないなら前回送信してから1時間経過しているかを判定する。

    if !user.new_record?
      return raise HogeError if user.requested_at > Time.current - 60.minutes
    end

requested_atは前回送信する際に保存した送信時間。もし新規レコード(初めての仮登録)ならここもパスする。

レコードを更新or保存する

    user.update_attributes!(
      registered_url: https://hogehoge..
      token: hogehoge..
      requested_at: Time.current
    )



これで、新規登録、重複の登録に対応することが可能。