Rails 5遇到了一个非常奇怪的问题,我有两个控制器,一个是users_controller
,另一个是api/v1/users_controller
。这两个控制器都有一个register
操作。我正试着把一份表格寄给这两个控制器。此表单如下所示,
<%= form_tag('v2/register/user', {id: "add-user-form", class: "jiffle-form", role: "form"}) do%>
#form body
<%= submit_tag("Resigter", data: {i18n: "register"}, class: "btn btn-lg btn-block btn-blue", id: "add-user", type: "submit") %>
<% end %>
Routes,
post "register" => "users#create", :as => "user_registeration_submit"
post "v2/register/user" => "api/v1/users#create"
当我使用/register
url提交表单时,它将被成功地处理。但是,当我使用v2/register/user
url提交表单时,我会得到Can't verify CSRF token authenticity
错误。
Params
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_controller
时,它工作得很好。
在哪里进行更改以使api/v1控制器工作?
发布于 2019-04-27 11:40:51
您可以简单地用application_controller.rb编写
protect_from_forgery with: :exception, unless: -> { request.format.json? }
并在routes.rb文件中设置默认格式为json。
但更好的办法是:
在您的示例中,您必须创建两个名称空间,一个用于处理API响应,另一个用于表单处理。相应地在routes.rb文件中使用命名空间。并相应地从ApplicationController继承了两个不同的基本控制器。
对于API
class Api::V1::ApplicationController < ApplicationController
protect_from_forgery with: :exception, unless: -> { request.format.json? }
end
并在routes.rb文件中设置默认格式为json。
resources :tasks, defaults: {format: :json}
表格视图
使用bydefault设置,或
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
注意:这里Admin和Api是两个名称空间。routes.rb文件如下所示:
#For admin
namespace :admin do
end
#For Api
namespace :api do
scope module: :v1 do
end
end
希望它能奏效:)
https://stackoverflow.com/questions/55884040
复制相似问题