auth.ts 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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. /**
  18. * Server Action 请求不能按照页面访问进行 redirect。
  19. */
  20. const isServerAction = request.headers.has("Next-Action");
  21. if (isServerAction) {
  22. return response;
  23. }
  24. const token = await getToken({
  25. req: request,
  26. secret: process.env.NEXTAUTH_SECRET
  27. });
  28. if (!token) {
  29. return response;
  30. }
  31. /**
  32. * 创建 redirect response
  33. */
  34. const redirectResponse = NextResponse.redirect(new URL("/",request.url));
  35. /**
  36. * 复制之前 response 的 cookies
  37. *
  38. * 保留 currency cookie
  39. */
  40. response.cookies.getAll().forEach(cookie => {
  41. redirectResponse.cookies.set(cookie);
  42. });
  43. return redirectResponse;
  44. }