Ruby on rails 向API::V1模块控制器提交请求时无法验证Rails令牌

Ruby on rails 向API::V1模块控制器提交请求时无法验证Rails令牌,ruby-on-rails,ruby,authenticity-token,Ruby On Rails,Ruby,Authenticity Token,我在Rails 5中遇到了一个非常奇怪的问题。我有两个控制器,第一个是users\u controller,第二个是api/v1/users\u controller。这两个控制器都有一个寄存器动作。我正在尝试向这两个控制器发布一个表单。此表单创建如下: #形体 路线 post "register" => "users#create", :as => "user_registeration_submit" post "v2/register/user" => "api/v1

我在Rails 5中遇到了一个非常奇怪的问题。我有两个控制器,第一个是
users\u controller
,第二个是
api/v1/users\u controller
。这两个控制器都有一个
寄存器
动作。我正在尝试向这两个控制器发布一个表单。此表单创建如下:


#形体
路线

post "register" => "users#create", :as => "user_registeration_submit"
post "v2/register/user" => "api/v1/users#create"
当我使用
/register
url提交表单时,表单得到了成功处理。但是,当我使用
v2/register/user
url提交我收到的表单时,
无法验证CSRF令牌的真实性
错误

参数

Processing by UsersController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"ADNTIp9alRB/ujRhkoqNuDkzdW6ANfcl/MbPjGLwVd6nwVuG5oi+uVhE9MeZo+1MeyKLbwZYNV31Vy/VH3M2bg==", "sfdc_token"=>"",
 "email"=>"[FILTERED]", "first_name"=>"kjl", "last_name"=>"jk", "contact_no"=>"894892849", "company_name"=>"j", "title"=>"kj",
 "internal_366vagan2"=>"", "consent"=>"true",
 "commit"=>"Register"}
当我使用ajax将表单提交到请求中带有X-CSRF-TOKEN头的
api/v1/users\u controller
时,它工作正常


在哪里进行更改以使api/v1控制器正常工作?

您只需在application\u controller.rb中编写即可

   protect_from_forgery with: :exception, unless: -> { request.format.json? }
并在routes.rb文件中设置默认格式为json

 resources :tasks, defaults: {format: :json}
但更好的方法是:

在您的例子中,您必须创建两个名称空间,一个用于处理API响应,另一个用于表单处理。相应地在routes.rb文件中使用名称空间。以及相应地从ApplicationController继承的两个不同的基本控制器

用于API

class Api::V1::ApplicationController < ApplicationController
   protect_from_forgery with: :exception, unless: -> { request.format.json? }
end
用于表单视图

使用默认设置,或

class Admin::AdminController < ApplicationController
   protect_from_forgery with: :exception
end
#In this case, comment it from main application_controller.rb file:protect_from_forgery with: :exception
希望它能起作用:)

#For admin
namespace :admin do

end 

#For Api
namespace :api do
    scope module: :v1 do

    end
end