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


















