如何在 ActionCable Channel 中获取 request.session?

How to get request.session inside ActionCable Channel?

有没有办法在Channel中获取(或从Connection传递)请求数据(实际上,我需要session[:_csrf_token],不要问为什么)?例如:

class MeetingChannel < ApplicationCable::Channel
  def subscribed
    session[:_csrf_token]
  end
end

目前,我只能在 Connection 中获得 csrf_token:

module ApplicationCable
  class Connection < ActionCable::Connection::Base
    def connect
      puts "**********************************************************"
      puts "CSRF token: #{request.session[:_csrf_token]}"
      puts "**********************************************************"
    end
  end
end

它输出(连接时):

**********************************************************
CSRF token: u33bsVI7HnF2bqWRfkriQUlLzIUpCcDVovgRTAkoGKM=
**********************************************************

在连接中,我们创建这个方法(因为 @request 是私有的):

def session
  @request.session
end

然后,在频道中您可以像这样访问会话:

session = connection.session