为什么我会收到重复的路缘请求?

时间:2013-07-19 13:50:55

标签: ruby ruby-on-rails-3 curb

我正在创建一个应用程序,它具有基于外部API和登录/注册方法的身份验证。我有一个名为RegistrationsController的简单控制器,它使用Curb激活请求。

这是控制器:

class RegistrationsController < ApplicationController
  def new
  end

  def create
    if params[:user][:email].present? && params[:user][:password].present? && params[:user][:phone].present? && params[:user][:login].present?
      # API request
      password = params[:user][:password]
      body = {
        "register" => {
          "password" => password,
          "email" => params[:user][:email],
          "phone" => params[:user][:phone],
          "login" => params[:user][:login]
        }
      }

      c = Curl::Easy.http_post("http://domain.com/register", body.to_json
      ) do |curl|
        curl.headers['Content-Type'] = 'application/json'
        curl.headers['application'] = 'appname'
        curl.headers['device'] = 'www'
      end

      c.perform
      response_body = JSON.parse(c.body_str)

      throw response_body # This line ALLWAYS gives me 'login taken' error
      return
    else
      @user = User.new(params[:user])
      render action: "new", notice: 'Error'
    end
  end
end 

(我还有一个views/registrations/new.html.slim视图,其中包含一个简单的表单,但现在并不重要。)

我的路线看起来像这样:

match 'users/sign_up' => 'registrations#new', :via => :get, :as => :user_register
match 'users/sign_up' => 'registrations#create', :via => :post, :as => :user_create

点击registrations#new页面上的“注册”按钮后,我的应用程序将触发两次“遏制”请求。结果,我总是收到“登录”错误。用户注册成功但我没有从第一个请求获得任何结果,只是从第二个请求。

这是由Rails引起的,我100%肯定它,因为在API服务器日志中可以看到请求被触发两次。此外,我有完全相同的用PHP编写的脚本,在那里,注册工作正常。

在我的Rails开发控制台中,请求只被触发一次,所以它真的很奇怪。

有谁知道这里发生了什么?

1 个答案:

答案 0 :(得分:0)

我找到了答案。

如果有人遇到类似的事情,那就是由c.perform行引起的。只需删除它就可以正常工作。

我将来应该更好地学习文档。