Elixir 将数据注入Phoenix';s动作参数
我正在尝试编写一些插件,以减少项目中不需要的代码量,我希望获取一些会话数据,并将其放入控制器操作中的_参数中。但是我不知道怎么做。我遇到了functon assign/3,但据我所知,它分配了要在模板中使用的数据Elixir 将数据注入Phoenix';s动作参数,elixir,phoenix-framework,Elixir,Phoenix Framework,我正在尝试编写一些插件,以减少项目中不需要的代码量,我希望获取一些会话数据,并将其放入控制器操作中的_参数中。但是我不知道怎么做。我遇到了functon assign/3,但据我所知,它分配了要在模板中使用的数据 def logged(conn, _opts) do case get_session(conn, :login) do nil -> conn |> Phoenix.Controller.put_flash(:error, "Musis
def logged(conn, _opts) do
case get_session(conn, :login) do
nil -> conn
|> Phoenix.Controller.put_flash(:error, "Musisz być zalogowany")
|> Phoenix.Controller.redirect( to: "/")
|> Plug.Conn.halt
login -> #here
end
end
我希望能够做到:
def someaction(conn, %{"login" => login}) do
#do something with login
end
有两个地方可以在
Plug.Conn
struct上存储键值对。和。通常,应用程序应使用assigns
,库应使用private
此存储用于库和框架,以避免写入用户存储(分配字段)。建议库/框架使用库名称作为键的前缀
使用assign
获得您的用户:
def logged(conn, _opts) do
case get_session(conn, :login) do
nil -> conn
...
login -> Plug.Conn.assign(conn, :current_user, login)
end
end
def someaction(conn, _params) do
# do something with conn.assigns.current_user
end
如果在控制器的函数中经常使用<代码> CurrutsUpUs/Cuff>函数,那么考虑在控制器中重写<代码>动作/ 2 < /代码>函数。如中的“为自定义参数重写
action/2
”中所述
为了完整性。您可以使用asconn更新参数(在用户身份验证的情况下我不会更新)。params
是一个映射:
update_in(conn.params, fn (params) -> Map.put(params, :something, "value") end)
update_in(conn.params, fn (params) -> Map.put(params, :something, "value") end)