使用ActionCable进行群聊应用程序会出现错误ActionController :: InvalidAuthenticityToken

时间:2021-04-13 01:17:01

I have been trying to get around an error I don't really understand. How can there be an Invalid Authenticity Token error?

我一直试图解决一个我不太懂的错误。怎么会出现无效的真实性令牌错误?

This is the error on the Terminal:

这是终端上的错误:

    Started GET "/serviceworker.js" for 127.0.0.1 at 2018-01-16 17:16:46 +0000

ActionController::RoutingError (No route matches [GET] "/serviceworker.js"):

actionpack (5.0.5) lib/action_dispatch/middleware/debug_exceptions.rb:53:in `call'
web-console (3.5.1) lib/web_console/middleware.rb:135:in `call_app'
web-console (3.5.1) lib/web_console/middleware.rb:28:in `block in call'
web-console (3.5.1) lib/web_console/middleware.rb:18:in `catch'
web-console (3.5.1) lib/web_console/middleware.rb:18:in `call'
actionpack (5.0.5) lib/action_dispatch/middleware/show_exceptions.rb:31:in `call'
railties (5.0.5) lib/rails/rack/logger.rb:36:in `call_app'
railties (5.0.5) lib/rails/rack/logger.rb:24:in `block in call'
activesupport (5.0.5) lib/active_support/tagged_logging.rb:69:in `block in tagged'
activesupport (5.0.5) lib/active_support/tagged_logging.rb:26:in `tagged'
activesupport (5.0.5) lib/active_support/tagged_logging.rb:69:in `tagged'
railties (5.0.5) lib/rails/rack/logger.rb:24:in `call'
sprockets-rails (3.2.1) lib/sprockets/rails/quiet_assets.rb:13:in `call'
actionpack (5.0.5) lib/action_dispatch/middleware/request_id.rb:24:in `call'
rack (2.0.3) lib/rack/method_override.rb:22:in `call'
rack (2.0.3) lib/rack/runtime.rb:22:in `call'
activesupport (5.0.5) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call'
actionpack (5.0.5) lib/action_dispatch/middleware/executor.rb:12:in `call'
actionpack (5.0.5) lib/action_dispatch/middleware/static.rb:136:in `call'
rack (2.0.3) lib/rack/sendfile.rb:111:in `call'
railties (5.0.5) lib/rails/engine.rb:522:in `call'
puma (3.11.0) lib/puma/configuration.rb:225:in `call'
puma (3.11.0) lib/puma/server.rb:624:in `handle_request'
puma (3.11.0) lib/puma/server.rb:438:in `process_client'
puma (3.11.0) lib/puma/server.rb:302:in `block in run'
puma (3.11.0) lib/puma/thread_pool.rb:120:in `block in spawn_thread'
  Rendering /usr/local/opt/rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/actionpack-5.0.5/lib/action_dispatch/middleware/templates/rescues/routing_error.html.erb within rescues/layout
  Rendering /usr/local/opt/rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/actionpack-5.0.5/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb
  Rendered /usr/local/opt/rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/actionpack-5.0.5/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (0.9ms)
  Rendered collection of /usr/local/opt/rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/actionpack-5.0.5/lib/action_dispatch/middleware/templates/routes/_route.html.erb [42 times] (9.2ms)
  Rendered collection of /usr/local/opt/rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/actionpack-5.0.5/lib/action_dispatch/middleware/templates/routes/_route.html.erb [1 times] (0.4ms)
  Rendered /usr/local/opt/rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/actionpack-5.0.5/lib/action_dispatch/middleware/templates/routes/_table.html.erb (16.0ms)
  Rendering /usr/local/opt/rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/actionpack-5.0.5/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb
  Rendered /usr/local/opt/rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/actionpack-5.0.5/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (1.3ms)
  Rendered /usr/local/opt/rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/actionpack-5.0.5/lib/action_dispatch/middleware/templates/rescues/routing_error.html.erb within rescues/layout (134.3ms)
Started POST "/chatrooms/1/messages" for 127.0.0.1 at 2018-01-16 17:16:52 +0000
Processing by MessagesController#create as HTML
  Parameters: {"utf8"=>"✓", "message"=>{"body"=>"hi"}, "chatroom_id"=>"1"}
Can't verify CSRF token authenticity.
Completed 401 Unauthorized in 0ms (ActiveRecord: 0.0ms)



ActionController::InvalidAuthenticityToken - ActionController::InvalidAuthenticityToken:

Started POST "/__better_errors/b0e0d47806bf58c8/variables" for 127.0.0.1 at 2018-01-16 17:16:53 +0000

This is my message controller

这是我的消息控制器

 class MessagesController < ApplicationController

  def create
    @message = Message.new(message_params)
    @chatroom = Chatroom.find(params[:chatroom_id])
    @message.chatroom = @chatroom
    @message.sender = current_user

    if @message.save
      respond_to do |format|
        format.html { redirect_to chatroom_path(@chatroom) }
        format.js
      end
    else
      respond_to do |format|
        format.html { render "chatrooms/show" }
        format.js
      end
    end

  end

private

def message_params params.require(:message).permit(:body) end

def message_params params.require(:message).permit(:body)end

end

This is the view where I have the chat form:

这是我有聊天表格的视图:

<div class="col-xs-4">
  <div class="chat-header"><h4><%= @chatroom.session.title %></h4></div>
  <div class="messages">
    <% @chatroom.messages.each do |message| %>
      <%= render "messages/message", message: message, user_is_messages_author: message.from?(current_user), c_user: current_user %>
    <% end %>
  </div>
  <div id="create-message">
    <%= simple_form_for [ @chatroom, Message.new ], remote: true, html: {autocomplete: "off" } do |f| %>
      <%= f.input :body, label: false %>
    <% end %>
  </div>
</div>

1 个解决方案

#1


0  

Your simple_form_for in the view might not be creating the authenticity token. Or you need to place the csrf meta tag in the head of the HTML document. Either way, you're trying to create a message the old fashioned way rather than using websockets. You have to send your messages through the client side component of actioncable as described here: http://guides.rubyonrails.org/action_cable_overview.html#client-side-components

视图中的simple_form_for可能未创建真实性令牌。或者您需要将csrf元标记放在HTML文档的头部。无论哪种方式,您都试图以旧式方式创建消息,而不是使用websockets。您必须通过此处所述的actioncable的客户端组件发送消息:http://guides.rubyonrails.org/action_cable_overview.html#client-side-components

#1


0  

Your simple_form_for in the view might not be creating the authenticity token. Or you need to place the csrf meta tag in the head of the HTML document. Either way, you're trying to create a message the old fashioned way rather than using websockets. You have to send your messages through the client side component of actioncable as described here: http://guides.rubyonrails.org/action_cable_overview.html#client-side-components

视图中的simple_form_for可能未创建真实性令牌。或者您需要将csrf元标记放在HTML文档的头部。无论哪种方式,您都试图以旧式方式创建消息,而不是使用websockets。您必须通过此处所述的actioncable的客户端组件发送消息:http://guides.rubyonrails.org/action_cable_overview.html#client-side-components