auth.ts 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import { NextResponse } from "next/server";
  2. import type { NextRequest } from "next/server";
  3. import { getToken } from "next-auth/jwt";
  4. export async function handleAuth(
  5. request: NextRequest,
  6. response: NextResponse
  7. ) {
  8. const { pathname } = request.nextUrl;
  9. const restrictedPaths = [
  10. "/customer/login",
  11. "/customer/register"
  12. ];
  13. const isRestricted = restrictedPaths.some(path => pathname.startsWith(path));
  14. if (!isRestricted) {
  15. return response;
  16. }
  17. const token = await getToken({
  18. req: request,
  19. secret: process.env.NEXTAUTH_SECRET
  20. });
  21. if (!token) {
  22. return response;
  23. }
  24. /**
  25. * 创建 redirect response
  26. */
  27. const redirectResponse = NextResponse.redirect(new URL("/",request.url));
  28. /**
  29. * 复制之前 response 的 cookies
  30. *
  31. * 保留 currency cookie
  32. */
  33. response.cookies.getAll().forEach(cookie => {
  34. redirectResponse.cookies.set(cookie);
  35. });
  36. return redirectResponse;
  37. }