Rails 6远程表单未验证Authenticity Token问题求助
Rails 6远程表单未验证Authenticity Token的原因
场景复现
在Rails 6中使用以下远程表单提交订阅请求:
<%= form_with url: "/subscribe_newsletter", local: false, id: "newsletter-form" do |f| %> <%= f.email_field :email, placeholder: "Entrez votre courriel...", required: true %> <%= f.hidden_field :conversion_source, value: "newsletter-block" %> <%= f.submit "S'inscrire", class: "cta", "data-action" => "click->abonnement#busyCursor" %> <% end %>
对应的控制器方法:
class AccountController < ApplicationController layout 'blank' def subscribe_newsletter user_params = { email: params[:email], conversion_source: params[:conversion_source] ||= "" } # 创建账户并发送确认邮件 new_user = User.new(user_params) new_user.skip_password_validation = true if new_user.save flash[:notice] = "Inscription réussie ! Vérifiez vos courriels pour confirmer votre inscription." respond_to do |format| format.js end end end end
问题
手动修改或删除表单中的隐藏Authenticity Token字段后,表单仍能成功提交并创建用户,Rails并未对Authenticity Token进行验证,这是为什么?
解决方案
远程表单并不会依赖自身携带的隐藏Authenticity Token字段,而是默认从页面头部的meta标签中获取该Token,这是Rails远程表单的固有特性。
内容的提问来源于stack exchange,提问作者nico_lrx
相关产品推荐
相关产品推荐

