【Drupal】reCAPTCHAを導入して不具合対応メモ【Docker】

はじめに

ウチのような場末サイトにもスパムだけは来るようで。

メール環境が整ったので ホームページのコンタクトフォームに適応して見たところ
スパムが大量に届くようになりました。

コンタクトフォーム自体不要なので塞いでも良かったのですが、試しに reCAPTCHA を導入して様子を見てみようと思います。

まほろさんや東雲なのが押せないやつですね。

導入方法は web に溢れているので割愛します。
導入に手間取ったメモを残します。

導入

機能拡張 > Add new module > Add from a URL から

を追加します。

その後 Google reCAPTCHA でサイトを登録しますが

よくわかってないので 数字が多いほうが良かろうと
スコアベース(v3)
を選択します。のちに後悔します。

CAPTCHA configuration > Captcha Points の ID がわからん

reCAPTCHA を設定したい コンタクトの FORM_ID がわからず、検索したところ
こちら 様を参考に html から

form_id や hidden を検索すれば良さそう。

<input data-drupal-selector="edit-contact-message-feedback-form" type="hidden" name="form_id" value="contact_message_feedback_form">

ありました。
contact_message_feedback_form
のようなのでこれを設定し有効にしました。

contact_message_feedback_formを追加・有効化

サイト所有者の確認が必要なエラー:キータイプが無効です。

reCAPTCHA が出るようになりましたが、機能しません。

このようなエラーが出て正常動作していない模様。

検索した結果 こちら に解決方法がありました。

導入時に Google reCAPTCHA で設定した reCAPTCHA タイプが合わないようです。

一度登録した reCAPTCHA を削除し、再登録

今度は チャレンジ(v2)を選択して登録します。

今度はちゃんと動きました。

サイトに予期せぬエラーが起こりました。しばらくたってから再度お試しください。

動作確認。

サイトに予期せぬエラーが起こりました。しばらくたってから再度お試しください。

Error: Class "ReCaptcha\ReCaptcha" not found in recaptcha_captcha_validation() (line 161 of modules/recaptcha/recaptcha.module).

なにやらエラーが発生しました。

モジュール内でエラーが起きているようなので、再度検索。

こちら に解決方法がありました。

機能拡張 > Add new module > Add from a URL から CAPTCHA をインストールしたのがまずかったようなので、docker exec でコンテナに侵入し コンテナ内で

composer require 'drupal/captcha:^1.10'

を実行。更新されている様子です。

再度テスト。今度は成功しました。

最後に

1.9.0 から 1.10.0 への更新のお知らせが来ましたが
composer で更新を試みたところ怒られました。

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Root composer.json requires drupal/captcha ^1.10 -> satisfiable by drupal/captcha[1.10.0].
    - drupal/captcha 1.10.0 requires drupal/core ^8.9 || ^9 -> found drupal/core[8.9.0, ..., 8.9.20, 9.0.0, ..., 9.5.9] but the package is fixed to 10.0.9 (lock file version) by a partial update and that version does not match. Make sure you list it as an argument for the update command.
  Problem 2
    - drupal/captcha 1.10.0 requires drupal/core ^8.9 || ^9 -> found drupal/core[8.9.0, ..., 8.9.20, 9.0.0, ..., 9.5.9] but the package is fixed to 10.0.9 (lock file version) by a partial update and that version does not match. Make sure you list it as an argument for the update command.
    - drupal/recaptcha 3.2.0 requires drupal/captcha ^1.4 || ^2 -> satisfiable by drupal/captcha[1.10.0].
    - drupal/recaptcha is locked to version 3.2.0 and an update of this package was not requested.

Use the option --with-all-dependencies (-W) to allow upgrades, downgrades and removals for packages currently locked to specific versions.

Installation failed, reverting ./composer.json and ./composer.lock to their original content.

どうやら Drupal10 には対応していない様子。

ベータ版はあまり入れたくないのですが

こちらを導入し無事最新版にアップデートできました。

# composer require 'drupal/captcha:^2.0@beta'
./composer.json has been updated
Running composer update drupal/captcha
Loading composer repositories with package information
Updating dependencies
Lock file operations: 0 installs, 1 update, 0 removals
  - Upgrading drupal/captcha (1.9.0 => 2.0.0-beta2)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 0 installs, 1 update, 0 removals
As there is no 'unzip' nor '7z' command installed zip files are being unpacked using the PHP zip extension.
This may cause invalid reports of corrupted archives. Besides, any UNIX permissions (e.g. executable) defined in the archives will be lost.
Installing 'unzip' or '7z' (21.01+) may remediate them.
  - Downloading drupal/captcha (2.0.0-beta2)
  - Upgrading drupal/captcha (1.9.0 => 2.0.0-beta2): Extracting archive
Generating autoload files
37 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
No security vulnerability advisories found