rails永遠の初心者の備忘録

物忘れの激しい経営者による備忘録

お問い合わせに迷惑メールが大量にきたので、「SimpleCaptcha2」で画像認証を導入した

設置しているサイトのお問い合わせフォームに死ぬほど大量に迷惑メールがきたので対処方法として画像認証を導入しました。

github.com

導入

導入は対して難しくなかったです。上記で紹介したgithubの手順通りにやったら簡単にできました。手順は以下の通りです。

1.ghostscriptを導入

ghostscriptってやつのインストールが必要らしいので、brewを使ってインストール。rvmを使っている人はrvmでインストールするんでしょうか。この辺はイマイチわかっていません。

brew install ghostscript

2.gemfileに記述してbundle install

gemfileに下記を記述してからターミナルでbundle installします。

/Gemfile

gem 'simple_captcha2', require: 'simple_captcha'
bundle install

インストールは素直にやってくれました。

3.migrationファイルを精製してrake db:migrate

simple_captchaを使うためにデータテーブルを精製してmigrateします。

rails generate simple_captcha [template_format]
rake db:migrate 

4.application_controllerにsimple_captchaをincludeする(controllerベースの場合)

simple_captchaを使えるようにするために、コントローラーにincludeします。ちなみにsimple_captchaはmodelベースでも使えるみたいで、modelベースで使いたい場合はmodelに記述することもできます。その場合はapplication_controllerに書く必要はなく該当するmodelに書けばいいみたいです。今回はお問い合わせフォームというmodelに紐づかないものに対して画像認証を入れたかったのでcontrollerに書きました。

/controllers/application_controller.rb

include SimpleCaptcha::ControllerHelpers

5.controllerに画像認証できた場合と出来なかった場合のロジックを書く

画像認証が出来た場合と出来なかった場合のロジックを書いてあげます。

/controllers/hoge.rb

if simple_captcha_valid?
  #画像認証が通った場合の処理を書きます。今回はお問い合わせありがとねというメールを自動返信します。
else
  #画像認証が通らなかった場合の処理を書きます。画像認証間違ってるよってメッセージをflashで出します。
end

6.viewに画像認証を表示させる

/views/hoge.html.erb

<%= show_simple_captcha %>

7.日本語化のためにlocalsのja.ymlを編集

日本語化しているので、下記を指定してあげないと、translation missingが表示されちゃうので、指定してあげます。

/locals/ja.yml

ja:
  simple_captcha:
    placeholder: "画像の文字を入力してください"
    label: "画像認証"
    refresh_button_text: "Refresh"

これでばっちり動きました。めでたし、めでたし。

迷惑メールはどうなった?

画像認証を導入してからぱたりと迷惑メールはとまりました。一方でユーザーさんのお問い合わせに一手間かかることになってしまったのでもっといい対策があれば、そっちも検討しようと思います。何か迷惑メールのよい対処法があれば教えてください!