Accessing cookies in Phoenix.Socket connect

We can get access to the user_token natively by copying LiveView’s approach (CSRF):

# lib/web/endpoint.ex
@session_options [ ... ]

socket "/socket", Web.UserSocket, websocket: [connect_info: [{:session, @session_options}]]
// assets/app.js
let csrf_token = /* get via `csrf_meta_tag()` or `csrf_token_value()` */
let socket = new Socket("/socket", {params: {_csrf_token: csrf_token}});
# lib/web/channels/user_socket.ex
def connect(_params, socket, %{session: session}) do
  if user_token = Map.get(session, "user_token") do
    user = Account.get_user_by_session_token(user_token)
    {:ok, assign(socket, :user, user)}
  else
    :error
  end
end