fix ThemeHook gate to validate session token not just presence
Check socket.assigns.current_scope (validated by mount_current_scope) instead of raw session token. Prevents stale/invalid session cookies from bypassing the site-live gate. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
2cc8c4a9cb
commit
9251beba68
@ -42,12 +42,13 @@ defmodule SimpleshopThemeWeb.ThemeHook do
|
|||||||
{:cont, socket}
|
{:cont, socket}
|
||||||
end
|
end
|
||||||
|
|
||||||
def on_mount(:require_site_live, _params, session, socket) do
|
def on_mount(:require_site_live, _params, _session, socket) do
|
||||||
cond do
|
cond do
|
||||||
Settings.site_live?() ->
|
Settings.site_live?() ->
|
||||||
{:cont, socket}
|
{:cont, socket}
|
||||||
|
|
||||||
session["user_token"] ->
|
# mount_current_scope runs first, so current_scope is already validated
|
||||||
|
socket.assigns[:current_scope] && socket.assigns.current_scope.user ->
|
||||||
{:cont, socket}
|
{:cont, socket}
|
||||||
|
|
||||||
not SimpleshopTheme.Accounts.has_admin?() ->
|
not SimpleshopTheme.Accounts.has_admin?() ->
|
||||||
|
|||||||
@ -56,6 +56,16 @@ defmodule SimpleshopThemeWeb.Shop.ComingSoonTest do
|
|||||||
assert {:error, {:redirect, %{to: "/users/register"}}} = live(conn, ~p"/")
|
assert {:error, {:redirect, %{to: "/users/register"}}} = live(conn, ~p"/")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "redirects when session token is stale (user deleted)", %{conn: conn} do
|
||||||
|
user = user_fixture()
|
||||||
|
conn = log_in_user(conn, user)
|
||||||
|
|
||||||
|
# Delete the user — session cookie is now stale
|
||||||
|
SimpleshopTheme.Repo.delete!(user)
|
||||||
|
|
||||||
|
assert {:error, {:redirect, %{to: "/users/register"}}} = live(conn, ~p"/")
|
||||||
|
end
|
||||||
|
|
||||||
test "gates all public shop routes", %{conn: conn} do
|
test "gates all public shop routes", %{conn: conn} do
|
||||||
user_fixture()
|
user_fixture()
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user