deviseヒューマンマシン検証の使用
3064 ワード
現在主流の検証コード形式は以下の通りである.問答問題 写真検証コード ピクチャ検証コード 1つ目は直接的で、主な問題は大量のデータを格納する必要があり、理論的に問題ライブラリが大きいほど解読しにくいことです.ここにはhumanizerを実現する2つ目は現実の写真を利用することであり、人間が写真を認識するのは簡単だが、機械は難しい.このような案が最も有名なのはGoogleが発売したrecaptchaサービスで、recaptchaはその実現に基づいている.3つ目は,提供された文字の組合せに基づいて画像を生成し,ユーザの入力を検証して人間かどうかを判断することである.ここで紹介するのは3つ目、simple_captcha2
simple_captcha2
まずdeviseをインストールするプロジェクトを用意します.実行
gem
html
controller
書き換えcreate:
テスト
このときページをリフレッシュすると認証コードの欄が表示され、
また、誤った認証コードを入力してログインすると認証コードエラー(flash)が提示されますが、ページをリフレッシュすると直接ログインに成功します.ここではdeviseが
方法1
方法2
検証をcreateの前に置いて、コードを追加します.
リファレンス
[Deviseにsimple_captcha 2を加えて検証コード検証を行う](https://blog.csdn.net/qwbtc/a...
完璧なRubyグラフィック認証コードGem
simple_captcha2
まずdeviseをインストールするプロジェクトを用意します.実行
rails g devise:controllers users
rails g devise:views users
編集config/rout.rb
Rails.application.routes.draw do
devise_for :users,controllers: {sessions: 'users/sessions'}
...
end
gem
gem 'simple_captcha2', require: 'simple_captcha'
実行bundle install
rails generate simple_captcha [template_format] # Available options erb, haml. Default: erb
rake db:migrate # Mongoid: skip this step and remove the migration
application_controllers.rb
に直接入れることもできます.html
views/users/sessions/new.html.erb
のformフォームに画像検証を追加します.
controller
controllers/users/session_controllers.rb
に追加include SimpleCaptcha::ControllerHelpers
書き換えcreate:
def create
if simple_captcha_valid?
super
else
flash[:alert]="Captcha code is wrong,try again!"
self.resource=resource_class.new(sign_in_params)
respond_with_navigational(resource){render :new}
end
end
テスト
このときページをリフレッシュすると認証コードの欄が表示され、
translation error
が表示され、en.yml
が設定される可能性があります.en:
hello: "Hello world"
simple_captcha:
label: "Enter numbers.."
placeholder: "Type here.."
また、誤った認証コードを入力してログインすると認証コードエラー(flash)が提示されますが、ページをリフレッシュすると直接ログインに成功します.ここではdeviseが
simple_captcha2
の検証結果をスキップして直接ログインに成功しましたが、ページはrespond_with_navigational(resource){render :new}
の理由でスキップしませんでした.これは明らかに私たちが望んでいるものではありません.simple_captcha2
の検証を機能させるべきです.方法1
sessions_controller.rb
にskip_before_filter :require_no_authentication, :only => [:new,:create]
を追加認証コードを入力し、ページをリフレッシュすると、ページがクラッシュし、エラーが表示されます.ActionController::InvalidAuthenticityToken in Users::SessionsController#create
ActionController::InvalidAuthenticityToken
Extracted source (around line #195):
def handle_unverified_request
raise ActionController::InvalidAuthenticityToken
end
end
end
方法2
検証をcreateの前に置いて、コードを追加します.
prepend_before_filter :captcha_valid,:only=> [:create]
...
private
def captcha_valid
if simple_captcha_valid?
true
else
flash[:alert]="Captcha code is wrong,try again!"
self.resource=resource_class.new(sign_in_params)
respond_with_navigational(resource){render :new}
end
end
リファレンス
[Deviseにsimple_captcha 2を加えて検証コード検証を行う](https://blog.csdn.net/qwbtc/a...
完璧なRubyグラフィック認証コードGem