Ruby on rails 无方法错误:在Rails Desive中使用Cookie进行登录尝试
这是我用于“当用户尝试登录两次或三次失败时”的功能 类用户::会话控制器<设计::会话控制器 在\u筛选器之前预结束\u:不需要\u身份验证,:only=>[:new, :创建] 在\u筛选器之前预结束\u:允许\u参数\u身份验证!,:仅=> :创建 在筛选器{request.env[“designe.skip_timeout”]=true} def新Ruby on rails 无方法错误:在Rails Desive中使用Cookie进行登录尝试,ruby-on-rails,cookies,devise,Ruby On Rails,Cookies,Devise,这是我用于“当用户尝试登录两次或三次失败时”的功能 类用户::会话控制器[:new, :创建] 在\u筛选器之前预结束\u:允许\u参数\u身份验证!,:仅=> :创建 在筛选器{request.env[“designe.skip_timeout”]=true} def新 cookies[:login_attempts] = cookies[:login_attempts] || 0 **unless params[:user][:email].blank?** if cooki
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))
结束
#发布/资源/登录
def创建
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
结束
在会议/新会议中:
=3%>
整个功能运行正常,但当重定向到新功能时
我收到以下错误:
*用户中的NoMethodError::SessionController#新建
nil:NilClass的未定义方法“[]”
错误显示在上述控制器新方法中的“除非参数[:用户][:电子邮件].blank?”行中*
请尝试帮助我。您的
参数[:user]
返回nil对象,即它不存在。你应该先检查一下:
if params[:user] && cookies[:email].eql?(params[:user][:email])
若用户两次登录失败,我可以显示recaptcha。那么在哪一步我可以在代码中添加“if valid_captcha”条件和captcha错误消息呢。这很令人困惑……这可能是个新问题
if params[:user] && cookies[:email].eql?(params[:user][:email])