我可以在函数参数内模式匹配Conn中的会话值吗?

时间:2014-12-06 05:41:57

标签: elixir phoenix-framework

我有一个会话密钥:identifiedas,可能存在,也可能不存在。我想要它,以便在存在此密钥时转到登录页面,服务器会将您重定向到主页。

我可以使用if来解决这个问题,但与其他函数子句中的模式相比,它似乎是一个坏主意,如果可能的话。

def login(conn, %{"username" => username, "password" => password}) do
  if Plug.Conn.get_session(conn, :identifiedas) do
    conn
    |> Flash.put(:notice, "You are already logged in.")
    |> redirect(to: "/")
  else
    # Actually try to login. Elided from example.
  end
end

我希望我喜欢它:

def login(%Conn{:something -> %{:identifiedas => _}, _fields) do
  conn
  |> Flash.put(:notice, "You are already logged in.")
  |> redirect(to: "/")
end

def login(conn, %{"username" => username, "password" => password}) do
  # Elided
end

1 个答案:

答案 0 :(得分:6)

是。您可以使用此模式:

def index(conn = %Plug.Conn{private: %{plug_session: %{identifiedas: _}}}, _params) do
  # ...
end