0

一点上下文和用例:我有这个凤凰应用程序,它允许经过身份验证的用户在数据库中搜索,检索公共数据。未经身份验证的用户使用 ajax 调用和路由来触发控制器并发送回 json 响应以获得相同的结果。

以某种方式将未经身份验证的用户连接到私人频道是否可以作为客人或其他方式,以便我可以放弃 ajax 调用?你是如何在你的应用程序中解决这个问题的?

我像这样创建我的套接字连接:

socket = new Socket('/socket', {params: {guardian_token: app.guardian_token}})

如果可能,我应该注意什么?

谢谢

4

1 回答 1

0

没有真正的理由你不能这样做。

如果您需要根据用户是否经过身份验证返回不同的数据,我可能会执行以下操作之一

为经过身份验证和未经身份验证的请求创建不同的通道名称。

“已验证:房间:4”和“未验证:房间:4”。您可能还想创建一个MyApp.Authenticated.RoomChannel模块和一个MyApp.Unauthenticated.RoomChannel. 但是,如果您有很多频道,这可能会有点失控。

handle_in/3在函数内部创建不同的分支。

在您的连接函数中,在套接字上放置一个标记,说明用户是否经过身份验证。然后,在您的handle_in/3功能中,您可以执行类似的操作

def handle_in(msg, params, socket) do
  if socket.assigns.authenticated do
    authenticated_request(msg, params, socket)
  else
    unauthenticated_request(msg, params, socket)
  end
end

但是,如果经过身份验证和未经身份验证的请求之间没有数据差异,则不会产生额外的开销。只做用户要求的事情。

于 2018-02-12T19:35:45.720 回答