.. 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 `_ を参照ください。