Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e6a032e8e0 | |||
| 81a0c2c6c8 |
@@ -1,4 +1,7 @@
|
||||
import type { Metadata } from "next";
|
||||
import { redirect } from "next/navigation";
|
||||
import { getServerSession } from "next-auth";
|
||||
import { authOptions } from "@/lib/auth";
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "Masuk",
|
||||
@@ -8,6 +11,15 @@ export const metadata: Metadata = {
|
||||
robots: { index: false, follow: true },
|
||||
};
|
||||
|
||||
export default function LoginLayout({ children }: { children: React.ReactNode }) {
|
||||
export default async function LoginLayout({
|
||||
children,
|
||||
}: {
|
||||
children: React.ReactNode;
|
||||
}) {
|
||||
// User yang sudah login tidak boleh mengakses halaman login lagi.
|
||||
const session = await getServerSession(authOptions);
|
||||
if (session?.user) {
|
||||
redirect(session.user.isAdmin ? "/admin" : "/");
|
||||
}
|
||||
return children;
|
||||
}
|
||||
|
||||
@@ -38,13 +38,16 @@ function LoginForm() {
|
||||
if (result?.error) {
|
||||
setError(result.error);
|
||||
} else {
|
||||
const rawCallback = searchParams.get("callbackUrl");
|
||||
let next = safeInternalPath(rawCallback);
|
||||
// Tanpa callbackUrl eksplisit, arahkan admin ke dashboard /admin.
|
||||
if (!rawCallback) {
|
||||
const session = await getSession();
|
||||
if (session?.user?.isAdmin) next = "/admin";
|
||||
}
|
||||
const callbackPath = safeInternalPath(searchParams.get("callbackUrl"));
|
||||
const session = await getSession();
|
||||
// Admin selalu diarahkan ke dashboard /admin setelah login — kecuali
|
||||
// callbackUrl memang menuju sub-halaman admin (deep link dari /admin/...).
|
||||
// callbackUrl non-admin (mis. "/" sisa dari percobaan login Google) tidak
|
||||
// boleh membuat admin "nyangkut" di halaman publik.
|
||||
const next =
|
||||
session?.user?.isAdmin && !callbackPath.startsWith("/admin")
|
||||
? "/admin"
|
||||
: callbackPath;
|
||||
router.push(next);
|
||||
router.refresh();
|
||||
}
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
import type { Metadata } from "next";
|
||||
import { redirect } from "next/navigation";
|
||||
import { getServerSession } from "next-auth";
|
||||
import { authOptions } from "@/lib/auth";
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "Daftar Akun",
|
||||
@@ -7,6 +10,15 @@ export const metadata: Metadata = {
|
||||
alternates: { canonical: "/register" },
|
||||
};
|
||||
|
||||
export default function RegisterLayout({ children }: { children: React.ReactNode }) {
|
||||
export default async function RegisterLayout({
|
||||
children,
|
||||
}: {
|
||||
children: React.ReactNode;
|
||||
}) {
|
||||
// User yang sudah login tidak boleh mengakses halaman daftar lagi.
|
||||
const session = await getServerSession(authOptions);
|
||||
if (session?.user) {
|
||||
redirect(session.user.isAdmin ? "/admin" : "/");
|
||||
}
|
||||
return children;
|
||||
}
|
||||
|
||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "setrip",
|
||||
"version": "0.16.8",
|
||||
"version": "0.16.9",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "setrip",
|
||||
"version": "0.16.8",
|
||||
"version": "0.16.9",
|
||||
"dependencies": {
|
||||
"@next-auth/prisma-adapter": "^1.0.7",
|
||||
"@prisma/adapter-pg": "^7.7.0",
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "setrip",
|
||||
"version": "0.16.8",
|
||||
"version": "0.16.9",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
|
||||
Reference in New Issue
Block a user