fix: use public admin auth redirects
This commit is contained in:
parent
e326cc6bba
commit
4828f044fa
2 changed files with 38 additions and 5 deletions
|
|
@ -1,3 +1,4 @@
|
||||||
|
import { headers } from "next/headers"
|
||||||
import { NextResponse } from "next/server"
|
import { NextResponse } from "next/server"
|
||||||
import {
|
import {
|
||||||
ADMIN_SESSION_COOKIE,
|
ADMIN_SESSION_COOKIE,
|
||||||
|
|
@ -8,7 +9,9 @@ import {
|
||||||
|
|
||||||
export async function POST(request: Request) {
|
export async function POST(request: Request) {
|
||||||
if (!isAdminCredentialLoginConfigured()) {
|
if (!isAdminCredentialLoginConfigured()) {
|
||||||
return NextResponse.redirect(new URL("/sign-in?error=config", request.url))
|
return NextResponse.redirect(
|
||||||
|
new URL("/sign-in?error=config", await getPublicOrigin(request))
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
const formData = await request.formData()
|
const formData = await request.formData()
|
||||||
|
|
@ -19,12 +22,14 @@ export async function POST(request: Request) {
|
||||||
|
|
||||||
if (!isAdminCredentialMatch(email, password)) {
|
if (!isAdminCredentialMatch(email, password)) {
|
||||||
return NextResponse.redirect(
|
return NextResponse.redirect(
|
||||||
new URL("/sign-in?error=invalid", request.url)
|
new URL("/sign-in?error=invalid", await getPublicOrigin(request))
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
const session = await createAdminSession(email)
|
const session = await createAdminSession(email)
|
||||||
const response = NextResponse.redirect(new URL("/admin", request.url))
|
const response = NextResponse.redirect(
|
||||||
|
new URL("/admin", await getPublicOrigin(request))
|
||||||
|
)
|
||||||
response.cookies.set(ADMIN_SESSION_COOKIE, session.token, {
|
response.cookies.set(ADMIN_SESSION_COOKIE, session.token, {
|
||||||
httpOnly: true,
|
httpOnly: true,
|
||||||
sameSite: "lax",
|
sameSite: "lax",
|
||||||
|
|
@ -35,3 +40,16 @@ export async function POST(request: Request) {
|
||||||
|
|
||||||
return response
|
return response
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function getPublicOrigin(request: Request) {
|
||||||
|
const headerStore = await headers()
|
||||||
|
const forwardedProto = headerStore.get("x-forwarded-proto")
|
||||||
|
const forwardedHost = headerStore.get("x-forwarded-host")
|
||||||
|
const host = forwardedHost || headerStore.get("host")
|
||||||
|
|
||||||
|
if (host) {
|
||||||
|
return `${forwardedProto || "https"}://${host}`
|
||||||
|
}
|
||||||
|
|
||||||
|
return new URL(request.url).origin
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { NextResponse } from "next/server"
|
import { NextResponse } from "next/server"
|
||||||
import { cookies } from "next/headers"
|
import { cookies, headers } from "next/headers"
|
||||||
import {
|
import {
|
||||||
ADMIN_SESSION_COOKIE,
|
ADMIN_SESSION_COOKIE,
|
||||||
destroyAdminSession,
|
destroyAdminSession,
|
||||||
|
|
@ -10,7 +10,9 @@ export async function POST(request: Request) {
|
||||||
const rawToken = cookieStore.get(ADMIN_SESSION_COOKIE)?.value || null
|
const rawToken = cookieStore.get(ADMIN_SESSION_COOKIE)?.value || null
|
||||||
await destroyAdminSession(rawToken)
|
await destroyAdminSession(rawToken)
|
||||||
|
|
||||||
const response = NextResponse.redirect(new URL("/sign-in", request.url))
|
const response = NextResponse.redirect(
|
||||||
|
new URL("/sign-in", await getPublicOrigin(request))
|
||||||
|
)
|
||||||
response.cookies.set(ADMIN_SESSION_COOKIE, "", {
|
response.cookies.set(ADMIN_SESSION_COOKIE, "", {
|
||||||
httpOnly: true,
|
httpOnly: true,
|
||||||
sameSite: "lax",
|
sameSite: "lax",
|
||||||
|
|
@ -21,3 +23,16 @@ export async function POST(request: Request) {
|
||||||
|
|
||||||
return response
|
return response
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function getPublicOrigin(request: Request) {
|
||||||
|
const headerStore = await headers()
|
||||||
|
const forwardedProto = headerStore.get("x-forwarded-proto")
|
||||||
|
const forwardedHost = headerStore.get("x-forwarded-host")
|
||||||
|
const host = forwardedHost || headerStore.get("host")
|
||||||
|
|
||||||
|
if (host) {
|
||||||
|
return `${forwardedProto || "https"}://${host}`
|
||||||
|
}
|
||||||
|
|
||||||
|
return new URL(request.url).origin
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue