0

我正在尝试在我的应用程序中设置电子邮件验证过程,并且我生成一个令牌就好了,并在用户注册时向他们发送电子邮件。但是当我点击验证链接时,'users_controller/confirm' 操作中的 if 和 else 语句都会被执行。我被重定向到 root_path 但用户记录中的两个字段被修改。当我从 rails 控制台运行 find_by_token 时,它会返回预期的用户。我正在使用 mysql 并且想知道查询中是否存在某种延迟会导致两者都执行。

  def confirm
    if User.find_by_token(params[:token]).nil?
      redirect_to root_path
    else
      @user = User.find_by_token(params[:token])
      cookies[:auth_token] = @user.auth_token
      User.skip_callbacks = true
      @user.update_attribute(:token, "")
      @user.update_attribute(:confirmed, 1)
      User.skip_callbacks = false
      reset_session
      redirect_to routes_path
    end
  end
4

1 回答 1

2

您可以使用过滤器之前检查和重定向这样

  before_filter :find_user

  def confirm
    #your action code
  end

  private
  def find_user
    @email = User.find_by_token params[:token].to_s
    redirect_to root_path, notice: 'Your token is wrong!' if @email.nil?
  end

这样,您的操作代码将仅针对有效记录运行。

于 2012-04-05T06:38:14.937 回答