您好我使用不同的域名来加载不同的数据集。我目前正在使用自定义插件根据主机名加载正确的域 ID。例如,在我endpoint.ex
的路由器之前得到了这个:
plug WebApp.DomainCheck
socket "/live", Phoenix.LiveView.Socket, websocket: [connect_info: [session: @session_options]]
...
plug WebApp.Router
和
defmodule WebApp.DomainCheck do
import Plug.Conn
@behaviour Plug
def init([]), do: []
def call(conn, _options \\ []) do
domains = Model.load_allowed_domains()
case Map.get(domains, conn.host) do
nil ->
conn
|> resp(401, "Domain not allowed")
|> halt()
domain_id ->
conn
|> assign(:domain_id, domain_id)
end
end
end
现在这适用于正常情况View
,因为我domain_id
在每个人中都有分配。但是我如何从插件中获取domain
数据注入到我的 s 中呢?LiveView
目前,我已将相同的域检查代码复制到每个 LiveViews mount()页面:
defmodule WebApp.WelcomeLive do
use WebApp, :live_view
@impl true
def mount(_args, _session, socket) do
domains = Model.load_allowed_domains()
host = socket.host_uri.host
case Map.get(domains, host) do
nil -> {:error, "Domain not allowed"}
domain_id -> {:ok, assign(socket, :domain_id, domain_id)}
end
end
有什么方法可以使插件有效地将这些数据推送到实时视图,而无需向每个安装添加代码?