0

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

这是控制器:

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页面上的“注册”按钮后,触发了两次 Curb 请求。结果,我总是收到“已登录”错误。用户注册成功,但我没有从第一个请求中得到任何结果,只是从第二个请求中得到。

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

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

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

4

1 回答 1

0

我找到了答案。

如果有人在类似的事情上挣扎,那是由c.perform线路引起的。只需将其删除,它就会正常工作。

我将来应该更好地研究文档。

于 2013-07-19T14:08:45.730 回答