如何在nextjs中检测引用页面url

How to detect referring page url in nextjs

提问人:Hooman Limouee 提问时间:8/25/2023 更新时间:8/25/2023 访问量:219

问:

在一个页面中,我使用 .router.push('destination-url')

我需要检查用户是否从我已经将他们重定向到的页面点击回来。 如果用户来自外部链接,则不得再次访问此页面(防止重复重定向到同一目的地)。

换句话说:只有当用户来自特定的内部页面时,我才需要将用户重定向到外部链接。

useEffect(() => {
  if (window) {
    if (router.isReady) {

      // --- HERE I NEED TO CHECK IF USER CLICKED BACK FROM THE EXTERNAL URL THAT I ALREADY REDIRECTED THEM TO ---

      getLinkAddress({id: router.query.id, price: router.query.price}).then((r1) => {
        if (r1.link_address) {
          setFound(true);
          router.push(r1.link_address).then();
        } else {
          setFound(false);

          setTimeout(() => {
            router.back();
          }, 3000);
        }
      });
    }
  }

  return () => { };
}, [router.query]);
javascript reactjs 重定向 next.js 浏览器历史

评论

0赞 Baki 8/25/2023
可以使用 Document.Referrer 属性检查上一页的 URL,并确定它是否与特定的内部页面匹配
0赞 Hooman Limouee 8/25/2023
@Baki - 它总是一样的,如果用户从我已经重定向到的外部 url 单击 BACK,它不会改变。
0赞 Baki 8/25/2023
您可以在浏览器的会话存储中设置标志,或者在将用户重定向到外部链接时设置cookie。然后,当用户导航回页面时,您可以检查是否存在此标志并避免重定向
0赞 Hooman Limouee 8/25/2023
@Baki - 这是个好主意。我会等待nextjs内置解决方案,如果我找不到,我会选择你的解决方案。谢谢

答:

0赞 Baki 8/25/2023 #1

你也许可以试试这个:

useEffect(() => {
  if (window && router.isReady) {

    const redirectedFlag = sessionStorage.getItem('redirectedFlag');

    if (!redirectedFlag) {

      getLinkAddress({ id: router.query.id, price: router.query.price }).then((r1) => {
        if (r1.link_address) {
          setFound(true);

          sessionStorage.setItem('redirectedFlag', 'true');

          router.push(r1.link_address).then();
        } else {
          setFound(false);

          setTimeout(() => {
            router.back();
          }, 3000);
        }
      });

    } else {
      console.log("User is coming back from the external link");
    }
  }

  return () => { };
}, [router.query]);