Rails 教程 7.4.4 - post 方法如何使用真实性令牌提交表单?

Rails Tutorial 7.4.4 - How does post method submit form with authenticity token?

我在 Rails Tutorial 7.4.4,我很好奇以下测试 post 中的 post_via_redirect 方法如何与 authenticity_token 参数一起形成。

以下测试将通过:

class UsersSignupTest < ActionDispatch::IntegrationTest
  test "valid signup information will add user to database" do
    assert_difference 'User.count', 1 do
      post_via_redirect users_path, user: { name: "Filius Flitwick",
                               email: "Filius_Flitwick@Hogworts.ORG",
                               password:                "charmsmaster",
                               password_confirmation:   "charmsmaster" }
    end
  end
end

为了防止CSRF(Cross Site Request Forgery),我假设如果表单中没有正确的authenticity_token参数,表单将无法通过验证。但是,我无法弄清楚 authenticity_token 是从哪里放入 parameters.

事实上,我不确定 rails 中的 POST 到底在做什么。 POST 会先请求 URL 的网页来获取 authenticity_token 吗?

测试环境默认关闭CSRF保护。您可以通过在 config/environments/test.rb 中添加以下行来激活它:

config.action_controller.allow_forgery_protection = true

参见 Configuration Rails Application 上的指南。