Improve OAuth #1

Changed files
+5 -3
app
login
oauth
callback
+3 -1
app/login/page.tsx
···
}: {
searchParams: Promise<{ error?: string; returnUrl?: string }>;
}) {
-
const { error, returnUrl = "/" } = await searchParams;
return (
<div className="LoginPage">
···
}: {
searchParams: Promise<{ error?: string; returnUrl?: string }>;
}) {
+
const params = await searchParams;
+
const error = params.error
+
const returnUrl = params.returnUrl && params.returnUrl.startsWith('/') ? params.returnUrl : '/';
return (
<div className="LoginPage">
+2 -2
app/oauth/callback/route.ts
···
if (state) {
try {
const parsed = JSON.parse(state);
-
if (parsed.returnUrl && typeof parsed.returnUrl === "string") {
returnUrl = parsed.returnUrl;
}
} catch {
···
session.did = oauthSession.did;
await session.save();
-
// Redirect to returnUrl
const redirectUrl = new URL(returnUrl, baseUrl);
return NextResponse.redirect(redirectUrl);
} catch (err) {
···
if (state) {
try {
const parsed = JSON.parse(state);
+
if (parsed.returnUrl && typeof parsed.returnUrl === "string" && parsed.returnUrl.startsWith('/')) {
returnUrl = parsed.returnUrl;
}
} catch {
···
session.did = oauthSession.did;
await session.save();
+
// Redirect to returnUrl: We have ensured the return URL is relative above:
const redirectUrl = new URL(returnUrl, baseUrl);
return NextResponse.redirect(redirectUrl);
} catch (err) {