メインコンテンツに移動
ホーム

古松

メインナビゲーション

  • ホーム
  • ビデオ
  • ご連絡

パンくず

  • ホーム
  • drupal8: モジュール(ReCaptha)のコードを変更せず、読み込む方法

drupal8: モジュール(ReCaptha)のコードを変更せず、読み込む方法

モジュール(ReCaptcha V3)がReCaptchaを呼び出せない

  • 手動でReCaptcha V3をインストール時に、依存しているモジュール(ReCaptcha)を呼び出せない
    • ReCaptcha V3の手動インストールは「Drupal8 : ReCaptcha V3 の使用時にクラス(ReCaptcha)が見つからないエラーおよび対処法」をご参考
  • ReCaptcha V3が元々Composerによってインストールされることを設計されています。つまり、Drupalの通常インストール(モジュールのインストール管理画面)ではうまく作動しません
  • ReCaptcha V3をComposerでインストールするときに、ほか(ReCaptcha)の依存関係をauto_loadなどのファイルに自動的に関連付けています
    ComposerでReCaptcha V3をvendorフォルダにインストール
  • ComposerでReCaptcha V3をインストールできないときに、上記関連付けはできないです。自分でReCaptchaとの関連付ける必要はあります
    • ReCaptcha V3を実行したときに、まず依存するモジュールのクラス(ReCaptcha)を呼びだすエラーが発生します

デバッカーでクラス(ReCaptcha)呼び出す元を特定

  • XDebugでReCaptchaを呼び出す元を簡単に確認できます
    デバッカーで呼び出す元の特定
  • 上記画面から見ると、クラス(ReCaptcha)を呼び出す元はFormのFormValidatorでした。
  • クラス(ReCaptcha)を使用するために、ReCaptcha V3のファイルにパスを追加すればよいですが、今後のReCaptcha V3のバージョンアップ時に再度パスを入れないといけないです(おそらくその時に忘れるでしょう)
    • 以下の自動クラスロードファイルを呼び出せればいろいろなクラスを自動的に関連づけるようになります
      require_once DRUPAL_ROOT . '/modules/recaptcha/recaptcha-php/src/autoload.php';

       

  • 解決はいろいろ方法を考えられますが、以下の二つは簡単だと思います
    • sites/default/settings ファイルに上記記述を追加します
    • カスタムモジュールを作成して、hook_form_alterで上記記述を追加
      function module_helper_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id){
       if ($form_id == 'user_login_form') {
          require_once DRUPAL_ROOT . '/modules/recaptcha/recaptcha-php/src/autoload.php';;
       }
      }

       

Drupal8 : ReCaptcha V3 の使用時にクラス(ReCaptcha)が見つからないエラーおよび対処法

モジュール(reCAPTCHA v3)が通常にインストール

  • モジュール:reCAPTCHA v3 が説明通りにDrupal8にインストール、有効化します
    • 依存しているモジュール: captcha もインストール、有効化します
  • サイト設定(Home >> Administration >> Configuration >> People >> CAPTCHA settings)でReCaptchaを設定します
    • まず、設定ページ上の「register for reCAPTCHA」リンクをクリックして、Googleの reCAPTCHA v3 (v2ではない)でSite Key/Secret Key を作成します
    • 作成されたSite Key/Secret Keyをコピーして、ReCaptchaモジュールの設定画面にペストします
      ReCaptcha 設定
    • 「reCAPTCHA v3 actions」タブで任意名前でreCAPTCHAアクションを作成します
    • 「CAPTCHA settings」タブで、作成したreCAPTCHAアクションを「Default challenge type」に設定します
    • 最後、「Form settings」タブで、必要なフォーム(例:ログインページ)にCAPTCHA を有効にします
  • CAPTCHA が有効なページ(例:ログインページ)に遷移し、reCaptchaが動作していることを確認しますreCaptcha アクション

クラス(ReCaptcha)が見つからないエラーが発生

  • reCAPTCHAのアクションが有効なページ(例:ログインページ)が動作(ログイン動作)時に、ReCaptchaクラスが見つからないエラーが発生しました。
    The website encountered an unexpected error. Please try again later.
    Error: Class 'ReCaptcha\ReCaptcha' not found in _recaptcha_v3_verify_captcha_response() (line 264 of modules/contrib/recaptcha_v3/recaptcha_v3.module). 

    クラスReCaptchaが見つからない

  • モジュール(reCaptcha v3)のソースコードを解析してみたら、どこもReCaptchaクラスを定義していないないです
    • クラス(ReCaptcha)を読めるように「drupal8: モジュール(ReCaptha)のコードを変更せず、読み込む方法」をご参考ください
  • モジュール(reCaptcha v3)のREADMEを読んでみたら、実はgoogle/reCaptchaライブラリを依存しています
    ・・・・・・・・・・・・・・・・・
    ・・・・・・・・・・・・・・・・・
    
    REQUIREMENTS
    ------------
    
    This module requires the following module:
    
     * Captcha (https://www.drupal.org/project/captcha)
      
    This module requires the following library:
    
     * google/recaptacha (https://github.com/google/recaptcha)   
       
    RECOMMENDED MODULES
    -------------------
    
     * reCAPTCHA (https://www.drupal.org/project/recaptcha):
       When enabled, reCAPTCHA v2 becomes available as fallback challenge. 
       
    INSTALLATION
    ------------
     
     * Install as you would normally install a contributed Drupal module. Visit
       https://www.drupal.org/documentation/install/modules-themes/modules-8
       for further information.
    
     * If not using Composer, 
       install the google/recaptacha (https://github.com/google/recaptcha) library.
     

     

  • READMEの説明通りに、githubでgoogle/recaptchaのPHPライブラリをダウンロードして、ライブラリの下に置き来ますgoogle_recaptcha_php_library
    • sites/all/libraries/google.recaptcha
  • もちろん、Librariesモジュールもインストール、有効化する必要があります

検索フォーム

カテゴリ別

  • laravel
  • drupal
  • javascript
  • windows
  • html
  • mysql
  • php
  • apache
  • css
  • SEO
  • video
  • wordpress
  • linux
  • python
  • Electron
  • Visual Studio Code

google ads