When I try to use the following function to assign a user to a socket, I see protocol String.Chars not implemented
error in my console at line #4. If I convert the returned struct to a string using “inspect,” the error goes away but I can’t reference individual keys, like “email”, on the client side. Not sure what I’m doing wrong as I’ve seen the appended snippet in a few tutorials.
How do I assign a User to a Phoenix.socket so that I can reference keys like email and name on the client side?
def connect(%{"token" => token}, socket) do
case Phoenix.Token.verify(socket, "user", token, max_age: 1209600) do
{:ok, user_id} ->
socket = assign(socket, :user, Repo.get!(User, user_id))
{:ok, socket}
{:error, _} -> #...
end
end
Found my mistake. The error was really coming from room_channel.ex. I was assigning the entire User struct in Presence.track(socket, socket.assigns…)
I figured it out by watching Chris’s Presence sneak peek a few more times. Thanks for reading.