aba*_*arr 2 elixir phoenix-framework
我正在为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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
在我的登录功能中,如果凭据正确,我将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
Run Code Online (Sandbox Code Playgroud)
在我的Logout功能中,我正在打电话configure_session (conn, drop: true).
def logout(conn, _params) do
configure_session(conn, drop: true)
redirect(conn, to: authentication_path(conn, :index))
end
Run Code Online (Sandbox Code Playgroud)
我IO.puts用来user_id在调用configure_session函数之前和之后显示会话,并且user_id仍然存在.
我还在check_for_user_on_session.ex 插件中记录了user_id,它还显示了在从logout函数重定向后调用user_id时存在的user_id.
我不确定我错过了什么,但我希望会话cookie在注销功能之后被销毁,并且为下一页创建的新会话cookie通过路由器和浏览器管道加载
提前致谢
小智 6
该logout函数有错误.它应该是:
def logout(conn, _params) do
configure_session(conn, drop: true)
|> redirect(to: authentication_path(conn, :index))
end
Run Code Online (Sandbox Code Playgroud)
在logout您编写的函数中,您正在调用,configure_session但之后您没有使用返回值,因此删除会话的指令未传递给redirect调用.
| 归档时间: |
|
| 查看次数: |
601 次 |
| 最近记录: |