在更多登录尝试时设置属性false

时间:2014-01-13 12:12:03

标签: ruby-on-rails cookies devise

如果用户登录失败,这是我用于生成recaptcha的代码。 在这里我必须检查其他情况,如果用户login_attempts超过4,那么我们必须使用户状态为false。

Session_controller:

  

def create

cookies[:email] =   params[:user][:email]

Rails.logger.debug("auth_options: #{auth_options.inspect}")      

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)
  if current_user.status != false
    respond_with resource, :location => after_sign_in_path_for(resource)
  else
    destroy
    flash[:error] = "Your account is locked"
  end

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
     

以下是我必须在上面的create方法中实现的代码:

  

如果cookies [:login_attempts] .to_i> 4

        current_user.update_attribute(:status,false)

        flash[:error]= "your account is dismissed"

      end
你可以告诉我在哪里包括这个吗?试图放在里面但有点混乱。

2 个答案:

答案 0 :(得分:0)

unless params[:user][:email].blank?
if   cookies[:email].eql?(params[:user][:email])
  cookies[:login_attempts] = cookies[:login_attempts].to_i + 1
  if cookies[:login_attempts].to_i > 4
    current_user.update_attribute(:status,false)
    flash[:error]= "your account is dismissed"
  end
else
  cookies[:login_attempts] = 0
end
end

我建议你使用会话来完成这项任务。可以覆盖cookie。

答案 1 :(得分:0)

Cookie不是很好的方法,因为cookie可以访问,将另一列counts添加到db各自的表中,然后将增加计数值写入相应的模型,如

class User .....
  def self.counts
     self.update_attributes(counts: counts+1)
     self.counts
  end
end

现在在控制器中

if User.counts > 4
  current_user.update_attribute(:status,false)
  flash[:error]= "your account is dismissed"
end

如果用户电子邮件有效,则更新计数为0

current_user.update_attributes(counts: 0)