9

私は Rails 6 をいじくり回しており、(Rails チュートリアル ブックの登録/ログイン フローを実装する) など、Rails によって生成されたフォームで ActionController::InvalidAuthenticityToken を常に取得しています。

<%= form_for(@user, url: 'signup') do |f| %>
     <%= render 'partials/error_messages' %>
     <%= f.label :name, "Nimi" %>
     <%= f.text_field :name %>
     <%= f.label :email, "E-mail" %>
     <%= f.email_field :email %>
     <%= f.label :password, "Parool" %>
     <%= f.password_field :password %>
     <%= f.label :password_confirmation, "Korda parooli" %>
     <%= f.password_field :password_confirmation %>
     <%= f.submit "Loo konto", class: "button-green" %>
<% end %>

これはすべてのフォームで発生し、出力ダンプは次のようになります

ダンプ

application.html.erb

<!DOCTYPE html>
<html>
  <head>
    <title>Storebase - kaasaegsed e-poed!</title>
    <%= csrf_meta_tags %>
    <%= csp_meta_tag %>

    <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= stylesheet_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
  </head>

  <body class="bg-gray-100 text-gray-900">
    <% flash.each do |message_type, message| %>
      <div class="bg-blue-100 text-blue-500 flex items-center h-12 px-12 shadow-lg flash-<%= message_type %>"><%= message %></div>
    <% end %>

    <%= yield %>
    <%= debug(params) if Rails.env.development? %>
  </body>
</html>

私は何をすべきか?

4

1 に答える 1

3

これは、アクション フックの後に取得するために Devise をサブクラス化するコントローラーで見られました。:destroyそれは私にとって行動でのみ起こっていました。

class MySessionsController < Devise::SessionsController
  after_action :after_login,  only: [:create]
  after_action :after_logout, only: [:destroy]

  private

  def after_login
  end

  def after_logout
  end

破棄時に認証をスキップするリスクは見られないため、コントローラー内に次の行を追加すると、問題が修正されました: skip_before_action :verify_authenticity_token, only:[:destroy]. ¯_(ツ)_/¯

これは Rails6 のアップグレードによって導入されたバグまたは機能ですか? スキップすることで見られないセキュリティ上のリスクはありますか? どんな洞察もいただければ幸いです:)

于 2019-09-02T00:31:43.920 に答える