This is the functionality i used for "when a user fails to attempt login twice r thrice".
class Users::SessionsController < Devise::SessionsController
prepend_before_filter :require_no_authentication, :only => [ :new, :create ]
prepend_before_filter :allow_params_authentication!, :only => :create
prepend_before_filter { request.env["devise.skip_timeout"] = true }
def new
cookies[:login_attempts] = cookies[:login_attempts] || 0 **unless params[:user][:email].blank?** if cookies[:email].eql?(params[:user][:email]) cookies[:login_attempts] = cookies[:login_attempts].to_i + 1 else cookies[:login_attempts] = 0 end end self.resource = resource_class.new(sign_in_params) clean_up_passwords(resource) respond_with(resource, serialize_options(resource))
end
# POST /resource/sign_in
def create
cookies[:email] = params[:user][:email] self.resource = warden.authenticate!(auth_options) if cookies[:email] cookies[:login_attempts] = 0 set_flash_message(:notice, :signed_in) if is_navigational_format? sign_in(resource_name, resource) respond_with resource, :location => after_sign_in_path_for(resource) else unless params[:user][:email].blank? if cookies[:email].eql?(params[:user][:email]) cookies[:login_attempts] = cookies[:login_attempts].to_i + 1 else cookies[:login_attempts] = 0 end end render :new end
end end
In sessions/new:
<% if cookies[:login_attempts].to_i >= 3 %> <div><%= raw recaptcha_tags %></div> <% end %>
Entire functionality is working fine but when redirected to new,
Im getting the following error:
*NoMethodError in Users::SessionsController#new
undefined method `[]' for nil:NilClass
The error is shown in "unless params[:user][:email].blank?" line in above controller new method.*
Please try to help me out..