curioustolearn

curioustolearn

Hello,

I am trying to learn how to use Phoenix Channels and trying out the code in the documentation. I tried the following on the client:

 let channel = socket.channel("room:lobby", {token: "roomtoken"})

 channel.join()
        .receive("ok", (resp) => {console.log("Joined successfully:", resp)})
        .receive("error", (resp) => {console.log("Unable to join:", resp)})

The join succeeds as expected, however the resp is empty. I thought the resp is empty on successful join because this has data from socket.assigns. So I used the following on the server:

  @impl true
  def join("room:lobby", payload, socket) do
    if authorized?(payload) do
      socket = assign(socket, :user_id, "bb")
      IO.inspect(socket.assigns, label: "socket assigns")
      {:ok, socket}
    else
      {:error, %{reason: "not authorized"}}
    end
  end

I expected the resp to now contain the {user_id: 'bb'}. But it is still empty.
My question is, on a successful join, what response is sent to the client. Can we add/change this response on the server?

Thank you.

Showing Posts 1 to 2

LostKobrakai

LostKobrakai

Take a look at the return value types for join/3: Phoenix.Channel — Phoenix v1.6.12

To return a response you need to return {:ok, resp, socket} from the function. assigns are a internal storage for the channel process. They’re not shared with the JS side of things.

curioustolearn

curioustolearn OP

Thank you @LostKobrakai. I don’t know how I did not think to look in the docs. I kept searching through the guide, assuming that those were the docs. I even tried {:ok, socket, resp} (which, not surprisingly, gave an error).

Anyhow, thanks again for answering the question.

— All posts loaded —

Where Next? Top

Trending in Questions Top

RSP87
I’m working on a project that simulates the bumbl example in the programming phoenix book. It acts almost like an email client. We have a...
New
nseaSeb
Hello, I know there is an approach for handling lists that allows for optimized traversal, but I can’t recall the specific method (somet...
New
brecabral
Documentation While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
New
kpanic
Hi everyone, I am toying with the idea of building a “match maker” for giving personal help to people that wants to start coding. I sta...
New
velrest
So my question is quite simple and i have found no conclusive answer on forum, google or AI. Should we use :erlang.float for Integer to ...
New
asweet-confluent
I recently noticed that Elixir’s Logger defaults its primary log level to :debug when no :logger, :level application configuration is pre...
New
apz
I’m new to elixir and just tried to install the elixirLS extension for VScode(ium) and it is throwing some errors that I would like help ...
New

Other Trending Topics Top

GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
marciok
Hi there! We created Gust: A task orchestrator inspired by Airflow. For those who have never heard about Aiflow, it’s a Python-based wor...
New
mhanberg
Hi everyone! The first release candidate for the Expert language server project is now available! We’ve published a press release detai...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews