如果用户登录失败,这是我用于生成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
答案 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)