gpt4 book ai didi

elixir - Phoenix session 未被删除

转载 作者:行者123 更新时间:2023-12-01 23:07:40 24 4
gpt4 key购买 nike

我正在为 Phoenix Elixir 应用程序编写身份验证。我的浏览器管道 中有一个插件,用于检查 session 中的user_id。如果它存在,我将 User 添加到 conn:

路由器.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 添加到 session 中:

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

在调用 configure_session 函数和 之前和之后,我正在使用 IO.puts 在 session 中显示 user_id user_id 仍然存在。

我还在 check_for_user_on_session.ex Plug 中记录了 user_id,它还显示了在从注销函数重定向后调用时出现的 user_id。

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

提前致谢

最佳答案

logout 函数有错误。应该是:

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

在您编写的 logout 函数中,您正在调用 configure_session 但随后您没有使用返回值,因此删除 session 的指令未传递给redirect 调用。

关于elixir - Phoenix session 未被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41626364/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com