【问题标题】:protect_from_forgery with: :null_session -- still getting Can't verify CSRF token authenticityProtect_from_forgery with: :null_session -- 仍然无法验证 CSRF 令牌的真实性
【发布时间】:2019-02-04 05:25:14
【问题描述】:

我有一个 React Native 应用程序向 Rails 后端发出 POST 请求。即使我在ApplicationController 中插入了protect_from_forgery with: :null_session。我发出的所有 POST 请求都失败了,我收到了错误:

无法验证 CSRF 令牌的真实性

这是我向 Rails 后端发出 POST 请求的控制器之一:

class AddressesController < ApplicationController

  def show
    address = Address.find(params[:id])
  end 

  def create
    address = Address.new(address_params)

    if address.save
      render json: {status: 'address created successfully'}, status: :create
    else
      render json: { errors: address.errors.full_messages }, status: :bad_request
    end
  end 

  def address_params
    params.require(:address).permit(:streetname, :zipcode, :city, :country)
  end

end

在发送 JSON POST 请求时,我也尝试过 protect_from_forgery unless: -&gt; { request.format.json? },但我仍然遇到同样的错误。谁能提供不同的解决方案?任何帮助将非常感激!提前致谢!

问题更新

我关注了这个人在link 中所做的事情。我插入了以下内容:

class ApplicationController < ActionController::Base
  skip_before_action :verify_authenticity_token
end

现在我没有收到“无法验证 CSRF 令牌真实性”作为错误,但我仍然从终端中的服务器收到 500(内部服务器错误)响应。由于某种原因,这些值没有被保存。这是错误,我得到:

  Address Create (0.4ms)  INSERT INTO "addresses" ("streetname", "zipcode", "city", "country", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?, ?)  [["streetname", "Imenstrade 39"], ["zipcode", "1082AK"], ["city", "Amsterdam"], ["country", "The Netherlands"], ["created_at", "2018-08-29 12:23:22.261020"], ["updated_at", "2018-08-29 12:23:22.261020"]]
  ↳ app/controllers/addresses_controller.rb:10
   (2.2ms)  commit transaction
  ↳ app/controllers/addresses_controller.rb:10
Completed 500 Internal Server Error in 12ms (Views: 0.2ms | ActiveRecord: 3.2ms)

【问题讨论】:

  • 你能显示地址型号代码吗?
  • 类地址
  • 可以这样保存地址吗:address.save!并显示输出
  • 开始 POST "/addresses" for 127.0.0.1 at 2018-08-29 15:02:06 +0200 AddressesController#create as / 参数:{"address "=>{"streetname"=>"Witte De Westraat", "zipcode"=>"1065FJ", "city"=>"Amsterdam", "country"=>"The Netherlands"}} (0.1ms) 开始交易
  • ↳ app/controllers/addresses_controller.rb:10 地址创建 (0.8ms) INSERT INTO "addresses" ("streetname", "zipcode", "city", "country", "created_at", "updated_at") 值 (?, ?, ?, ?, ?, ?) [["streetname", "Witte De Westraat"], ["zipcode", "1065FJ"], ["city", "Amsterdam"] , ["国家", "荷兰"], ["created_at", "2018-08-29 13:02:06.301544"], ["updated_at", "2018-08-29 13:02:06.301544"]] ↳ app/controllers/addresses_controller.rb:10 (1.2ms) 提交事务 ↳ app/controllers/addresses_controller.rb:10

标签: ruby-on-rails ruby api react-native post


【解决方案1】:

你可以用ActionController::API 代替ApplicationController,我看到你写的语法错误status: :create 而不是status: :created

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-15
    • 2015-07-24
    • 2014-06-16
    • 2012-05-08
    • 2015-12-29
    • 2023-03-26
    • 2016-09-17
    • 2017-07-19
    相关资源
    最近更新 更多