Skip to content

Commit 78e4fb9

Browse files
committed
Delete locks in before send callback
1 parent 9cf908e commit 78e4fb9

File tree

2 files changed

+24
-5
lines changed

2 files changed

+24
-5
lines changed

lib/extensions/persistent_session/plug/cookie.ex

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -229,11 +229,18 @@ defmodule PowPersistentSession.Plug.Cookie do
229229
defp filter_invalid!(clauses), do: raise "Invalid get_by clauses stored: #{inspect clauses}"
230230

231231
defp lock_auth_user(conn, token, user, metadata, config) do
232+
id = {[__MODULE__, token], self()}
232233
nodes = Node.list() ++ [node()]
233234

234-
case :global.set_lock({[__MODULE__, token], self()}, nodes, 0) do
235+
case :global.set_lock(id, nodes, 0) do
235236
true ->
236-
auth_user(conn, user, metadata, config)
237+
conn
238+
|> auth_user(user, metadata, config)
239+
|> register_before_send(fn conn ->
240+
:global.del_lock(id, nodes)
241+
242+
conn
243+
end)
237244

238245
false ->
239246
Plug.assign_current_user(conn, user, config)

lib/pow/plug/session.ex

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -246,11 +246,23 @@ defmodule Pow.Plug.Session do
246246
end
247247

248248
defp lock_create(conn, session_id, user, config) do
249+
id = {[__MODULE__, session_id], self()}
249250
nodes = Node.list() ++ [node()]
250251

251-
case :global.set_lock({[__MODULE__, session_id], self()}, nodes, 0) do
252-
true -> create(conn, user, config)
253-
false -> {conn, user}
252+
case :global.set_lock(id, nodes, 0) do
253+
true ->
254+
{conn, user} = create(conn, user, config)
255+
256+
conn = register_before_send(conn, fn conn ->
257+
:global.del_lock(id, nodes)
258+
259+
conn
260+
end)
261+
262+
{conn, user}
263+
264+
false ->
265+
{conn, user}
254266
end
255267
end
256268

0 commit comments

Comments
 (0)