凤凰城卫报和会话应用程序

时间:2016-04-18 12:54:57

标签: phoenix-framework

我在凤凰应用程序上使用Guardian但我不能在带有Guardian的控制器中使用put_session和get_session方法

defmodule Bonsai.LedgerController do
 use Bonsai.Web, :controller

 alias Bonsai.{Repo, Ledger}

 plug Guardian.Plug.EnsureAuthenticated, handler: Bonsai.SessionController
 plug :scrub_params, "ledger" when action in [:create]

 def index(conn, _params) do
   put_session(conn, :sess_val, "A value") # Generates error
   ledgers = Repo.all(Ledger)

   render(conn, "index.json", ledgers: ledgers)
 end

1 个答案:

答案 0 :(得分:4)

这里有两个问题。

首先,您需要在管道中获取会话。这通常在您的路由器中完成:

pipeline :browser do
  #...
  plug :fetch_session
  #...
end

第二个问题是您正在调用put_session,但结果未被使用。试试这个:

def index(conn, _params) do
  conn = put_session(conn, :sess_val, "A value")
  ledgers = Repo.all(Ledger)

  render(conn, "index.json", ledgers: ledgers)
end