这是我用于“当用户未能尝试登录两次r三次”时使用的功能 .
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
除非params [:user] [:email] .blank?
如果cookies [:email] .eql?(params [:user] [:email])
cookies [:login_attempts] = cookies [:login_attempts] .to_i 1
其他
cookies [:login_attempts] = 0
结束
结束
self.resource = resource_class.new(sign_in_params)
clean_up_passwords(资源)
respond_with(resource,serialize_options(resource))
结束#POST / resource / sign_in def create cookies [:email] = params [:user] [:email]
self.resource = warden.authenticate!(auth_options)
如果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)
其他
除非params [:user] [:email] .blank?
如果cookies [:email] .eql?(params [:user] [:email])
cookies [:login_attempts] = cookies [:login_attempts] .to_i 1
其他
cookies [:login_attempts] = 0
结束
结束
渲染:新的
结束
结束
在session / new中:
<%if cookies [:login_attempts] .to_i> = 3%>
<div> <%= raw recaptcha_tags%> </ div> <%end%>
整个功能工作正常,但重定向到新的,
我收到以下错误:
- Users :: SessionsController #new中的NoMethodError
未定义的方法`[]'为nil:NilClass
错误显示在“除非params [:user] [:email] .blank?”在上面的控制器新方法行 . *
请尽力帮助我..
1 回答
你的
params[:user]
返回nil对象,a.k.a它不存在 . 你首先要检查它: