这是我用于“当用户未能尝试两次登录r三次”时使用的功能。
类Users :: SessionsController<设计:: SessionsController
prepend_before_filter:require_no_authentication,:only => [:新的, :创建]
prepend_before_filter:allow_params_authentication!,:only => :创建
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))
端
#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
结束
在sessions / new中:
<% if cookies[:login_attempts].to_i >= 3 %> <div><%= raw recaptcha_tags %></div> <% end %>
整个功能正常,但重定向到新的时,
我收到以下错误:
用户中的未定义的方法`[]'为nil:NilClass
错误显示在“除非params [:user] [:email] .blank?”在上面的控制器新方法行。*
请尽力帮助我..
答案 0 :(得分:0)
你的params[:user]
返回nil对象,a.k.a它不存在。你应该先检查一下:
if params[:user] && cookies[:email].eql?(params[:user][:email])