当前位置:  开发笔记 > 编程语言 > 正文

凤凰会议未被删除

如何解决《凤凰会议未被删除》经验,为你挑选了1个好方法。

我正在为Phoenix Elixir应用程序编写身份验证.我有一个插件我的浏览器管道,检查会话中的user_id.如果它存在,我将用户添加到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

在我的登录功能中,如果凭据正确,我将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

在我的Logout功能中,我正在打电话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用来user_id在调用configure_session函数之前和之后显示会话,并且user_id仍然存在.

我还在check_for_user_on_session.ex 插件中记录了user_id,它还显示了在从logout函数重定向后调用user_id时存在的user_id.

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

提前致谢



1> 小智..:

logout函数有错误.它应该是:

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

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

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有