使用easy_captcha生成登录验证码 ruby on rails

(1)新增gem to Gemfile ,then bundle install

gem 'easy_captcha', git: 'https://github.com/phatworx/easy_captcha.git'
gem 'rmagick'

(2)after bundle execute

rails g easy_captcha:install

运行完这句话,可以看到app/controllers/application_controller.rb 和 config/routes.rb 的变化

class ApplicationController < ActionController::Base

+ # reset captcha code after each request for security

+ after_filter :reset_last_captcha_code!

config/routes.rb 里多了一句

Cms::Application.routes.draw do

+ captcha_route

(3)修改用户登录文件app/controllers/sessions_controller.rb

   def create
     if user = CmsUser.authenticate(params[:username], params[:password])
       session[:user_id] = user.id
-      redirect_to root_path
+      if captcha_valid? params[:captcha]
+        redirect_to root_path
+      else
+        flash.now[:error] = "验证码错误"
+        render :new
+      end
     else
       flash.now[:error] = "用户名或密码错误"
       render :new

(4)修改对应的view,app/views/sessions/new.html.erb

             <%= form_tag login_path, method: :post, class: "form-signin" do %>
               <input type="text" name="username" class="form-control" placeholder="Email" required autofocus>
               <input type="password" name="password" class="form-control" placeholder="Password" required>
+              <p>请输入验证码 <%= text_field_tag :captcha %></p>
+              <p><%= captcha_tag %></p>
               <button class="btn btn-lg btn-primary btn-block" type="submit">登录</button>
               <% if flash[:error] %>
                 <p class="notice" ><%= flash[:error] %></p>
<% end %>
<% end %>