You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js 13中认证完成后如何重定向至之前的请求页面?

Next.js 12 实现受保护路由登录后重定向回原请求页

当用户访问受保护路由时,若未认证需先跳转至登录页;认证成功后,再自动跳回用户最初请求的受保护路由,以下是具体实现方案:

1. 登录成功后的重定向逻辑

在登录组件中,通过useRouter获取路由实例,读取跳转登录页时携带的from参数,完成跳转:

import { useRouter } from "next/router"

const router = useRouter();

const onSuccess = () => {
    // 从路由参数中获取原请求地址
    const prev = router.query.from as string;
    // 跳转到原地址,若无则默认跳转首页
    router.replace(prev || '/');
};

2. 受保护路由的跳转拦截逻辑

在受保护路由组件中,判断用户未认证时,将当前路由地址作为from参数传递给登录页:

import { useRouter } from "next/router";
import { useEffect } from "react";

const ProtectedRoute = () => {
  const router = useRouter();
  // 替换为实际的认证状态判断逻辑
  const isAuthenticated = false;

  useEffect(() => {
    if (!isAuthenticated) {
      // 跳转至登录页并携带原请求地址
      router.push({
        pathname: "/login",
        query: { from: router.asPath }
      });
    }
  }, [isAuthenticated, router]);

  // 未认证时可返回加载组件或空
  if (!isAuthenticated) {
    return <div>加载中...</div>;
  }

  return <div>这是仅认证用户可见的受保护内容</div>;
};

export default ProtectedRoute;

关键说明

  • router.asPath会获取当前路由的完整路径(包含查询参数),确保原请求的状态被保留
  • 使用router.replace而非router.push,避免在浏览器历史记录中留下登录页的跳转记录,优化用户体验

内容的提问来源于stack exchange,提问作者liben hailu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 04:22:08