【Rails】フォームにGoogleのreCAPTCHAを入れた
2017-10-22 | カテゴリ >> Rails

Webサイトのフォームで、ロボットやスパム的なアクセスを防ぎたく、画像を使った “人間かどうかの認証” としてreCAPTCHAを入れました。
Rails向けのライブラリなども整っていて、めちゃ簡単に実装できたので良かったです。

↓こーゆーヤツ

使い方

サイトでreCAPTCHAを使うサイト(ドメイン)の登録をする。
https://www.google.com/recaptcha/intro/index.html

Labelは複数サイトを管理してる場合の使い分けに使うものだと思われる(詳細不明。すません)
V2を選んで、サイトのドメインを記入すれば登録完了。

登録が完了すると、Key情報などが表示されるので、これをあとでサーバー環境変数なり何なりに使う。

余談ですが、ドメインの欄はサブドメインなどは入れたりせずに(アスターとかもつけないで)サブドメインのサイトでも使えました。
サブドメインを使用しているStaging環境でもちゃんと動いた。

GemのInstall

https://github.com/ambethia/recaptcha/
こやつをGemfileに追加して、bundle installする。

このgemが面倒な部分をほとんどやってくれる。
スーパーありがたい。

API KEYを環境変数に設定する

recaptcha の登録後に出てきたSite keyと Secret keyを登録する

export RECAPTCHA_SITE_KEY='6Lc6BAAAAAAAAChqRbQZcn_yyyyyyyyyyyyyyyyy'
export RECAPTCHA_SECRET_KEY='6Lc6BAAAAAAAAKN3DRm6VA_xxxxxxxxxxxxxxxxx'

自分の場合はenvrc使っていたので、それに追記した。

フォームにパーツを追加

slim を使ってる場合はフォームが書いてあるViewの中に

= recaptcha_tags

と追加するだけ。
 簡単すぎる。
簡単すぎて命の危険さえ感じる。

というわけで早速ローカルで見てみると。。

ん。 あそういう感じね。。

reCAPTCHAのサイトをもっかい見てみますと、

localhost domains are no longer supported by default. If you wish to continue supporting them for development you can add them to the list of supported domains for your site key. Go to the admin console to update your list of supported domains. We advise to use a separate key for development and production and to not allow localhost on your production site key.

なに言ってるのかよくわからないけど、ぶっちゃけAPIの登録時にドメイン欄に localhost っていう文字列も追加すればいいだけだった。

追加した結果。。。

でたー

ところで、 さきほど入れたGem(ambethia/recaptcha)のREADME読んでたら、
ダークとかいうテーマがある事を発見する。
ためしに、

= recaptcha_tags theme: :dark

と、引数で指定してみると…

というデザインになりました。
なるほどね。

controller で判定する

Viewに入れたので、もうあとはControllerでreCAPTCHAのチェックがOKになっているかどうか判定するだけです。
verify_recaptchaメソッドを呼ぶだけでBooleanで返ってくるそうですよ。

if verify_recaptcha(model: @user) && @user.save

引数の (model: @user) の部分なんですが、
これを指定しておくことで、失敗したときにerrors.messages の中に勝手にエラーメッセージ入れてくれるので書きました。
カスタムメッセージとかのオプションもあったから、もっと柔軟にできるっぽい。

とてもお手軽で嬉しいAPIでした。
おわり

 

Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedIn
2017-10-22 | カテゴリ >> Rails 

関連記事

Comment





Comment



*