2

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

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

但是,在我的频道设置中,我似乎在加入时没有收到来自客户的任何信息:

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

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

4

1 回答 1

6

join/3接收的载荷是 JS 客户端的第二个参数中设置的.channel(),而不是传递给.join(). 因此,在客户端,您应该执行以下操作:

const data = { token: localStorage.getItem('phoenixAuthToken') };
const channel = socket.channel("foo", data);
channel.join().receive(...);
于 2017-03-25T12:07:17.337 回答