【问题标题】:Authlogic validation orderAuthlogic 验证顺序
【发布时间】:2011-06-07 04:16:43
【问题描述】:

伙计们。我在进行 authlogic 登录验证时遇到问题。我在用户模型中有一个神奇的“活动”字段,如果活动是假的,当用正确的密码登录时,它会弹出“你被暂停,请联系你的管理”的消息(我在 I18n 文件中定义了这个消息);当使用错误密码登录时,它会弹出not_active消息加上password_invalid消息,如“密码无效”。我认为这是因为 authlogic 对“活动”字段和密码都进行了验证,而且密码验证似乎是第一位的。

我的问题是,如果“活动”为假,如何绕过密码验证。或者,我可以只显示 not_active 消息吗?我的代码如下:

if @user_session.save
  redirect_to home_path
else
  render :json => {:success => false, :error => @user_session.errors.full_messages.join("\n")}
end

【问题讨论】:

  • 我认为你应该先检查密码,然后检查活动。
  • @Joy:但如果 active 为 false,我想绕过密码验证。如果用户处于非活动状态,我只想显示 not_active 消息,无论用户输入正确或错误的密码,都没有 password_invalid 消息。

标签: ruby-on-rails authlogic


【解决方案1】:

好的,所以我不喜欢这样的用户体验,但如果你真的想要,请执行以下操作:

before_filter :restrict_inactive_users, :on=>:create

def restrict_inactive_users
  @user = User.find_by_login(params[:user_session][:login]) rescue nil
  return unless @user
  unless @user.active?
    flash[:error] = "You are suspended, please contact your administration"
    render :action=>:new
    return false 
  end
end

def create
  @user_session = UserSession.new(params[:user_session])
  if @user_session.save
    redirect_to home_path
  else
    render :json => {:success => false, :error =>   @user_session.errors.full_messages.join("\n")}
  end
end

【讨论】:

  • 感谢 Jesse,这个解决方案很容易理解 :)
【解决方案2】:

今天我想出了一个解决方案,它不会绕过密码验证,而只是从 user_session 中删除密码错误消息。代码如下:

if @user_session.save
  redirect_to home_path
else
  @user_session.errors.delete(:password) unless @user_session.attempted_record.active
  render :json => {:success => false, :error => @user_session.errors.full_messages.join("\n")}
end

【讨论】:

    【解决方案3】:

    首先通过您选择的标识符(例如电子邮件或用户名)获取用户。 如果用户不活跃,您可以在重定向回登录页面之前删除其他错误。

            @user_session.errors.clear
    

    然后重新渲染页面时不会显示错误。但您必须提供自定义错误消息,例如通过 flash.now[:error] 或您的 json 响应。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-10
      • 2010-11-11
      • 2011-05-07
      • 2011-01-12
      • 1970-01-01
      • 1970-01-01
      • 2014-04-26
      相关资源
      最近更新 更多