Elixir/Phoenix在加入频道时传递有效载荷

Ily*_*lya 2 elixir phoenix-framework phoenix-channels

通道具有该authorized?功能,我想在加入通道时传递生成的本地令牌,以便我可以验证用户的角色,如下所示:

const data = { token: localStorage.getItem('phoenixAuthToken') };
channel.join(data).receive('ok', (response) => {
            ...
            });
        });
Run Code Online (Sandbox Code Playgroud)

但是,在我的频道设置中,我似乎没有从加入时的客户端收到任何内容:

def join("settings", payload, socket) do
  IO.inspect(payload)
  if authorized?(payload) do
    {:ok, socket}
  else
    {:error, %{reason: "unauthorized"}}
  end
end
Run Code Online (Sandbox Code Playgroud)

IO.inspect(payload)只是%{}.我在这里做错了什么?甚至可以在加入频道时收到消息吗?

Dog*_*ert 5

join/3接收的有效负载是JS客户端的第二个参数中设置.channel()的有效负载,而不是传递给的参数.join().所以,在客户端,你应该做的事情如下:

const data = { token: localStorage.getItem('phoenixAuthToken') };
const channel = socket.channel("foo", data);
channel.join().receive(...);
Run Code Online (Sandbox Code Playgroud)