无方法错误:在Rails Devise中使用cookie的登录尝试

时间:2013-12-06 10:21:51

标签: ruby-on-rails cookies devise

这是我用于“当用户未能尝试两次登录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 %>

整个功能正常,但重定向到新的时,

我收到以下错误:

用户中的 * NoMethodError :: SessionsController #new

未定义的方法`[]'为nil:NilClass

错误显示在“除非params [:user] [:email] .blank?”在上面的控制器新方法行。*

请尽力帮助我..

1 个答案:

答案 0 :(得分:0)

你的params[:user]返回nil对象,a.k.a它不存在。你应该先检查一下:

if params[:user] && cookies[:email].eql?(params[:user][:email])