web2py version: 1.99.4

2.4. ReCAPTCHA

ReCAPTCHA はボットからのアクセスを防御すると共に、OCRで読み取れない本の文字の解読に活かすシステムです。 現在 Google からサービスを提供しています。

2.4.1. 設定

ReCAPTCHAを利用するには次の手順で、Public Key とPrivate Key を取得することが必要です。

モデル定義(db.pyなど)にて、 ReCAPTCHA に関係する属性に Recaptcha インスタンスを設定します。

設定例

from gluon.tools import Recaptcha
auth.settings.captcha = Recaptcha(request, 'PUBLIC_KEY', 'PRIVATE_KEY')

第二・第三パラメータには、Public Key と Private Key を設定します。

標準で、認証画面と CRUD 画面 で利用できます。この他にフォーム画面でも利用可能です。これらについては 使用例 を参考にしてください。

2.4.2. Recaptchaクラス

Recaptcha クラスのコンストラクタのパラメータについて説明します。

class tools.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 などを参照してください。

2.4.3. ReCAPTCHAに関連する属性

Auth クラスに、ReCAPTCHA に関連する次の属性があります。

Auth.settings.captcha
Recaptcha インスタンス指定すると ReCAPTCHA を認証画面で使用します。デフォルトは None です。
ReCAPTCHA を使用する認証画面は、 ログイン , ユーザ登録 , ユーザ名確認 , パスワードリセット依頼 になります。
Auth.settings.login_captcha
Recaptcha インスタンス指定しますと ログイン画面で ReCAPTCHA を使用します。
もしくは False を指定すると ReCAPTCHA を使用しません。デフォルトは None です。
Auth.settings.register_captcha
Recaptcha インスタンス指定しますと ユーザ登録画面で ReCAPTCHA を使用します。
もしくは False を指定すると ReCAPTCHA を使用しません。デフォルトは None です。
Auth.settings.retrieve_username_captcha
Recaptcha インスタンス指定しますと ユーザ名確認画面で ReCAPTCHA を使用します。
もしくは False を指定すると ReCAPTCHA を使用しません。デフォルトは None です。
Auth.settings.retrieve_password_captcha
Recaptcha インスタンス指定しますと パスワードリセット依頼画面で ReCAPTCHA を使用します。
もしくは False を指定すると ReCAPTCHA を使用しません。デフォルトは None です。

captcha は認証画面全体の、他の属性は個々の画面の ReCAPTCHA の設定になります。 これらの設定値の組み合わせをまとめたのが、次の表になります。チェックされている設定で、ReCAPTCHAが動作します。

captcha

 
Noneインスタンス

ログイン

 None

login_captcha

  False
インスタンス

ユーザ登録

None

register_captcha

  False
インスタンス

ユーザ名確認

None

retrieve_username_captcha

  False
インスタンス

パスワードリセット依頼

None

retrieve_password_captcha

  False
インスタンス

この他、 Crud クラスにも ReCAPTCHA に関する次の属性があります。

Crud.settings.captcha
Recaptcha インスタンス指定すると ReCAPTCHA を CRUD 画面で使用します。デフォルトは None です。
ReCAPTCHA を使用する CRUD 画面は、 レコード作成、レコード更新 になります。
Crud.settings.create_captcha
Recaptcha インスタンス指定しますと レコード作成画面で ReCAPTCHA を使用します。
もしくは False を指定すると ReCAPTCHA を使用しません。デフォルトは None です。
Crud.settings.update_captcha
Recaptcha インスタンス指定しますと レコード更新画面で ReCAPTCHA を使用します。
もしくは False を指定すると ReCAPTCHA を使用しません。デフォルトは None です。

captcha は CRUD 画面全体の、他の属性は個々の画面の ReCAPTCHA の設定になります。 これらの設定値の組み合わせをまとめたのが、次の表になります。チェックされている設定で、ReCAPTCHAが動作します。

 

captcha

 
Noneインスタンス

レコード作成

 None

create_captcha

  False
インスタンス

レコード更新

 None

update_captcha

  False
インスタンス

2.4.4. 使用例

ReCAPTCHA を使用する設定を示します。

使用例1(認証画面)

from gluon.tools import Recaptcha
auth.settings.captcha = Recaptcha(request, 'PUBLIC_KEY', 'PRIVATE_KEY')

この設定では、次の画面で ReCAPTCHA を使用します。

../../_images/web2py_ac_045r.JPG

ログイン

../../_images/web2py_ac_044r.JPG

ユーザ登録

../../_images/web2py_ac_046r.JPG

ユーザ名確認

../../_images/web2py_ac_047r.JPG

パスワードリセット依頼

使用例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画面のイメージです。

../../_images/web2py_ac_048r.JPG

使用例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クラスの element() メソッドを利用して、ReCAPTCHA をフォームに挿入しています。

この他、 tools モジュール内にある 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でのイメージです。

../../_images/web2py_ac_049r.JPG

使用例6(画面カスタマイズ)

Recaptcha の optionパラメータでカスタマイズ設定を行います。

テーマの設定を white に変えてみます。

from gluon.tools import Recaptcha
auth.settings.register_captcha = Recaptcha(request, 'PUBLIC_KEY', 'PRIVATE_KEY',
options = 'theme : \'white\'')
../../_images/web2py_ac_086r.PNG

white

この他テーマには、blackglass , clean があります。

../../_images/web2py_ac_087r.PNG

blackglass

../../_images/web2py_ac_088r.PNG

clean

カスタマイズの詳細は Customizing the Look and Feel of reCAPTCHA を参照ください。