Phoenix Framework Websocket,在运行时设置Check_origin



我正在使用EXRM作为Release Manager

我在我的prod.exs中添加了一个config

config :my_app, check_origin: "${CHECK_ORIGIN}"

问题是,Websocket在编译时配置了

transport :websocket, Phoenix.Transports.WebSocket

所以我不能做这样的事情:

transport :websocket, Phoenix.Transports.WebSocket, check_origin: Application.get_env(:my_app, :check_origin) |> Poison.decode!

任何人都知道我如何在运行时配置Websocket的传输,因此我可以使用环境变量(这是编码的JSON)

编辑:

这是我已经尝试过的:

def start(_type, _args) do                                                                                                                                                                                                          
    import Supervisor.Spec, warn: false                                                                                                                                                                                               
    c_o = ((Application.get_env(:my_app, :check_origin) || "true") |> Poison.decode!)                                                               
    Application.put_env(:my_app, MyApp.Endpoint, Application.get_env(:my_app, MyApp.Endpoint) ++ [check_origin: c_o])  
......

以下应有作用:

首先,在transport行中跳过check_origin

transport :websocket, Phoenix.Transports.WebSocket

然后,在您的端点模块的init/2函数中,在开始时添加它:

config = Keyword.put(
  config,
  :check_origin,
  Application.get_env(:my_app, :check_origin) |> Poison.decode!
)

在全新的凤凰1.3应用中,我明白了:

iex(1)> FooWeb.Endpoint.config :check_origin
false

将以下内容添加到init/2

config = Keyword.put(config, :check_origin, true)

我得到:

iex(1)> FooWeb.Endpoint.config :check_origin
true

根据源代码,如果在传输的配置中找不到check_origin,则原点检查应返回到此配置变量。让我知道它是否有效,我没有测试该功能。

相关内容

最新更新