【问题标题】:Phoenix session not being deleted凤凰会话没有被删除
【发布时间】:2017-01-13 02:14:28
【问题描述】:

我正在为 Phoenix Elixir 应用编写身份验证。我的 Browser Pipeline 中有一个 Plug,用于检查会话中的 user_id。如果存在,我将 User 添加到 conn:

router.ex

pipeline :browser do
    plug :accepts, ["html"]
    plug :fetch_session
    plug :fetch_flash
    plug :protect_from_forgery
    plug :put_secure_browser_headers
    plug AccountMgr.Plugs.CheckSessionForUser
end

check_for_user_on_session.ex

def call(conn, _opts) do
    user_id = get_session(conn, :user_id)

    cond do
      user = user_id && Repo.get(User, user_id) ->
        assign(conn, :current_user, user)
      true ->
        assign(conn, :current_user, nil)
    end
end

在我的 Login 函数中,如果凭据正确,我会将 user_id 添加到会话中:

cond do
      user && checkpw(password, user.password_hash) ->
        conn
        |> assign(:user, user)
        |> put_session(:user_id, user.id)
        |> configure_session(renew: true) 
        |> redirect(to: portfolio_path(conn, :index))
      user ->
        {:error, :unauthorised, conn}
      true ->
        dummy_checkpw() 
        {:error, :not_found, conn}
end

在我的注销功能中,我正在调用configure_session (conn, drop: true)

def logout(conn, _params) do
    configure_session(conn, drop: true)
    redirect(conn, to: authentication_path(conn, :index))
end  

我使用IO.puts 在调用configure_session 函数之前和之后的会话中显示user_id,并且user_id 仍然存在。

我还将 user_id 记录在 check_for_user_on_session.ex Plug 中,它还显示在从注销功能重定向后调用它时存在的 user_id。

我不确定我错过了什么,但我希望会话 cookie 会在注销功能后被销毁,并为通过路由器和浏览器管道的下一页加载创建一个新的/p>

提前致谢

【问题讨论】:

  • 当您说您使用IO.puts 来显示user_id 时,我认为您需要在下一个请求中检查它,而不是现在的请求
  • 谢谢大卫,我已经在检查会话 user_id 的插件上记录了相同的信息(它在浏览器管道中)并且它存在用于重定向页面加载

标签: elixir phoenix-framework


【解决方案1】:

logout 函数有错误。应该是:

def logout(conn, _params) do
    configure_session(conn, drop: true)
    |> redirect(to: authentication_path(conn, :index))
end

在您编写的logout 函数中,您调用了configure_session,但是您没有使用返回值,因此删除会话的指令没有传递给redirect 调用。

【讨论】:

  • 谢谢大卫......这让我发疯了
猜你喜欢
  • 2015-09-09
  • 2016-03-20
  • 2018-11-27
  • 2018-07-02
  • 2017-07-21
  • 2016-11-03
  • 1970-01-01
  • 1970-01-01
  • 2016-09-09
相关资源
最近更新 更多