使用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" style="color:red;"><%= flash[:error] %></p>
<% end %>
<% end %>