Current section
Files
Jump to
Current section
Files
lib/helpers/request_helpers.ex
defmodule KeenAuth.Helpers.RequestHelpers do
@moduledoc """
Helper functions for handling HTTP requests in authentication flows.
"""
import Phoenix.Controller, only: [redirect: 2]
alias KeenAuth.Helpers.RedirectValidator
alias KeenAuth.Plug.AuthSession
@doc """
Redirects the user back to their original destination after authentication.
The redirect URL is resolved in order of priority:
1. Auth session `:redirect_to` value
2. `redirect_to` parameter from request params
3. Falls back to "/"
All redirect URLs are validated through `KeenAuth.Helpers.RedirectValidator`
to prevent open redirect vulnerabilities.
"""
@spec redirect_back(Plug.Conn.t(), map()) :: Plug.Conn.t()
def redirect_back(conn, params \\ %{}) do
{conn, session_redirect} = AuthSession.get_and_delete(conn, :redirect_to)
raw_redirect = session_redirect || params["redirect_to"]
redirect_to = RedirectValidator.validate(raw_redirect, conn)
redirect(conn, to: redirect_to)
end
end