.. meta:: :keywords: web2py, framework, Access control, アクセス制御, 認証, ReCAPTCHA .. raw:: html
web2py version: 1.99.4
.. _ac_recaptcha: ReCAPTCHA ========= ReCAPTCHA はボットからのアクセスを防御すると共に、OCRで読み取れない本の文字の解読に活かすシステムです。 現在 Google からサービスを提供しています。 設定 ---- ReCAPTCHAを利用するには次の手順で、Public Key とPrivate Key を取得することが必要です。 .. toctree:: recaptcha_signup モデル定義(db.pyなど)にて、 ReCAPTCHA に関係する属性に :class:`~tools.Recaptcha` インスタンスを設定します。 設定例 :: from gluon.tools import Recaptcha auth.settings.captcha = Recaptcha(request, 'PUBLIC_KEY', 'PRIVATE_KEY') 第二・第三パラメータには、Public Key と Private Key を設定します。 標準で、認証画面と CRUD 画面 で利用できます。この他にフォーム画面でも利用可能です。これらについては :ref:`ac_recaptcha_example` を参考にしてください。 Recaptchaクラス --------------- Recaptcha クラスのコンストラクタのパラメータについて説明します。 .. currentmodule:: tools .. class:: Recaptcha(request, public_key, private_key [, use_ssl, error, error_message, label, options ]) request request オブジェクトを指定します。 public_key ReCAPTCHA の Public Key を指定します。 private_key ReCAPTCHA の Public Key を指定します。 public_key ReCAPTCHA の Private Key を指定します。 use_ssl True を指定すると ReCAPTCHA サーバに SSL/TLS で接続します。 デフォルトは False です。 error | 使用するエラーコードを指定するようです。デフォルトは None です。 | このパラメータは使用しない方がよいでしょう。もし使用する場合、 `ここ `_ に記述されているエラーコードを指定するようです。 error_message マッチしなかった場合のエラーメッセージを指定します。デフォルトは 'invalid' です。 label ReCAPTCHA のラベルを指定します。デフォルトは 'Verify:' です。 options | オプションを指定します。デフォルトは '' (空値)です。 | オプションの詳細は、 `Customizing the Look and Feel of reCAPTCHA `_ などを参照してください。 ReCAPTCHAに関連する属性 ----------------------- :class:`~Auth` クラスに、ReCAPTCHA に関連する次の属性があります。 .. attribute:: Auth.settings.captcha | :class:`~tools.Recaptcha` インスタンス指定すると ReCAPTCHA を認証画面で使用します。デフォルトは None です。 | ReCAPTCHA を使用する認証画面は、 :ref:`ac_user_login` , :ref:`ac_user_register` , :ref:`ac_user_retrieve_username` , :ref:`ac_user_request_reset_password` になります。 .. attribute:: Auth.settings.login_captcha | :class:`~tools.Recaptcha` インスタンス指定しますと ログイン画面で ReCAPTCHA を使用します。 | もしくは False を指定すると ReCAPTCHA を使用しません。デフォルトは None です。 .. attribute:: Auth.settings.register_captcha | :class:`~tools.Recaptcha` インスタンス指定しますと ユーザ登録画面で ReCAPTCHA を使用します。 | もしくは False を指定すると ReCAPTCHA を使用しません。デフォルトは None です。 .. attribute:: Auth.settings.retrieve_username_captcha | :class:`~tools.Recaptcha` インスタンス指定しますと ユーザ名確認画面で ReCAPTCHA を使用します。 | もしくは False を指定すると ReCAPTCHA を使用しません。デフォルトは None です。 .. attribute:: Auth.settings.retrieve_password_captcha | :class:`~tools.Recaptcha` インスタンス指定しますと パスワードリセット依頼画面で ReCAPTCHA を使用します。 | もしくは False を指定すると ReCAPTCHA を使用しません。デフォルトは None です。 :attr:`~Auth.settings.captcha` は認証画面全体の、他の属性は個々の画面の ReCAPTCHA の設定になります。 これらの設定値の組み合わせをまとめたのが、次の表になります。チェックされている設定で、ReCAPTCHAが動作します。 .. include:: recaptcha_diagram.html :start-after: ac_recaptcha_attribute_start :end-before: ac_recaptcha_attribute_end | この他、 :class:`~Crud` クラスにも ReCAPTCHA に関する次の属性があります。 .. attribute:: Crud.settings.captcha | :class:`~tools.Recaptcha` インスタンス指定すると ReCAPTCHA を CRUD 画面で使用します。デフォルトは None です。 | ReCAPTCHA を使用する CRUD 画面は、 レコード作成、レコード更新 になります。 .. attribute:: Crud.settings.create_captcha | :class:`~tools.Recaptcha` インスタンス指定しますと レコード作成画面で ReCAPTCHA を使用します。 | もしくは False を指定すると ReCAPTCHA を使用しません。デフォルトは None です。 .. attribute:: Crud.settings.update_captcha | :class:`~tools.Recaptcha` インスタンス指定しますと レコード更新画面で ReCAPTCHA を使用します。 | もしくは False を指定すると ReCAPTCHA を使用しません。デフォルトは None です。 :attr:`~Cuth.settings.captcha` は CRUD 画面全体の、他の属性は個々の画面の ReCAPTCHA の設定になります。 これらの設定値の組み合わせをまとめたのが、次の表になります。チェックされている設定で、ReCAPTCHAが動作します。 .. include:: recaptcha_diagram.html :start-after: ac_recaptcha_attribute2_start :end-before: ac_recaptcha_attribute2_end .. _ac_recaptcha_example: 使用例 ------ ReCAPTCHA を使用する設定を示します。 使用例1(認証画面) ^^^^^^^^^^^^^^^^^^^ :: from gluon.tools import Recaptcha auth.settings.captcha = Recaptcha(request, 'PUBLIC_KEY', 'PRIVATE_KEY') この設定では、次の画面で ReCAPTCHA を使用します。 .. include:: recaptcha_diagram.html :start-after: ac_recaptcha_display_start :end-before: ac_recaptcha_display_end 使用例2(ユーザ登録画面のみ) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :: from gluon.tools import Recaptcha auth.settings.register_captcha = Recaptcha(request, 'PUBLIC_KEY', 'PRIVATE_KEY') 使用例3(CRUD画面) ^^^^^^^^^^^^^^^^^^^ :: from gluon.tools import Recaptcha crud.settings.register_captcha = Recaptcha(request, 'PUBLIC_KEY', 'PRIVATE_KEY') 認証画面でも ReCAPTCHA を利用するなら、次の設定でもよいです。 :: from gluon.tools import Recaptcha crud.settings.register_captcha = auth.settings.captch CRUD画面のイメージです。 .. image:: ../../images/web2py_ac/web2py_ac_048r.JPG :width: 30 % :class: img-border 使用例4(FORMでの利用) ^^^^^^^^^^^^^^^^^^^^^^^ ReCAPTCHAは認証や CRUD 画面だけでなく、FORMでも利用可能です。その場合も Recaptchaクラスを利用できます。 モデル定義 :: from gluon.tools import Recaptcha コントローラ記述 :: captcha = Recaptcha(request, 'PUBLIC_KEY', 'PRIVATE_KEY') form=FORM('Your name:', INPUT(_name='name', requires=IS_NOT_EMPTY()), captcha, INPUT(_type='submit')) if form.accepts(request.vars, session): response.flash = 'form accepted' elif form.errors: response.flash = 'form has errors' else: response.flash = 'please fill the form' return dict(form=form) ReCAPTCHA を FORMのコンポーネントとして設定しています。 使用例5(SQLFORMでの利用) ^^^^^^^^^^^^^^^^^^^^^^^^^^ ReCAPTCHAは SQLFORM でも利用可能です。 モデル定義 :: from gluon.tools import Recaptcha db.define_table('comment',Field('text_area', 'text')) コントローラ記述 :: def comment(): captcha = Recaptcha(request, 'PUBLIC_KEY', 'PRIVATE_KEY') form = SQLFORM(db.comment) form.element('table').insert(-1,TR('',captcha,'')) if form.accepts(request.vars, session): response.flash = 'form accepted' elif form.errors: response.flash = 'form has errors' else: response.flash = 'please fill out the form' return dict(form=form) この設定では、DIVクラスの :meth:`~DIV.element` メソッドを利用して、ReCAPTCHA をフォームに挿入しています。 この他、 :mod:`~tools` モジュール内にある :func:`~addrow` 関数で、ReCPTCHAを組み込むことも可能です。 モデル定義 :: from gluon.tools import Recaptcha, addrow db.define_table('comment',Field('text_area', 'text')) コントローラ記述 :: def comment(): captcha = Recaptcha(request, 'PUBLIC_KEY', 'PRIVATE_KEY') form = SQLFORM(db.comment, formstyle='table3cols') addrow(form, captcha.label, captcha, captcha.comment, 'table3cols', 'captcha__row') if form.accepts(request.vars, session): response.flash = 'form accepted' elif form.errors: response.flash = 'form has errors' else: response.flash = 'please fill out the form' return dict(form=form) SQLFORMでのイメージです。 .. image:: ../../images/web2py_ac/web2py_ac_049r.JPG :width: 30 % :class: img-border 使用例6(画面カスタマイズ) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ :class:`Recaptcha` の optionパラメータでカスタマイズ設定を行います。 テーマの設定を white に変えてみます。 :: from gluon.tools import Recaptcha auth.settings.register_captcha = Recaptcha(request, 'PUBLIC_KEY', 'PRIVATE_KEY', options = 'theme : \'white\'') .. figure:: ../../images/web2py_ac/web2py_ac_086r.PNG :width: 30 % :class: img-border white この他テーマには、blackglass , clean があります。 .. figure:: ../../images/web2py_ac/web2py_ac_087r.PNG :width: 30 % :class: img-border blackglass .. figure:: ../../images/web2py_ac/web2py_ac_088r.PNG :width: 30 % :class: img-border clean カスタマイズの詳細は `Customizing the Look and Feel of reCAPTCHA `_ を参照ください。