セキュリティ系の勉強、その他開発メモとか雑談. GithubはUnity触っていた頃ものがメイン 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
    )



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