有两个地方可以在Plug.Conn
结构上存储键值对.分配和私人.通常,您应该使用assigns
您的应用程序和private
库.
此存储旨在供库和框架使用,以避免写入用户存储(:assigns字段).建议库/框架为密钥添加库名称前缀.
使用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
如果current_user
频繁使用控制器功能,请考虑覆盖action/2
控制器中的功能.如文档中的"覆盖action/2
自定义参数"中所述
def action(conn, _params) do apply(__MODULE__, action_name(conn), [conn, conn.params, conn.assigns.current_user) end def someaction(conn, _params, current_user) do # do something with current_user end
为了完整.您可以使用Kernel.update_in/2更新params(我不会在用户身份验证的情况下),因为它conn.params
是一个地图:
update_in(conn.params, fn (params) -> Map.put(params, :something, "value") end)