我正在创建一个应用程序,它具有基于外部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开发控制台中,请求只被触发一次,所以它真的很奇怪。
有谁知道这里发生了什么?
答案 0 :(得分:0)
我找到了答案。
如果有人遇到类似的事情,那就是由c.perform
行引起的。只需删除它就可以正常工作。
我将来应该更好地学习文档。