Задать вопрос
@SNina
Отчаянно пытаюсь научиться писать хорошие сайты

Как при логине или регистрации правильно вернуться назад, чтобы не уйти со своего сайта?

Проект на Next.js app v14.
Как определить предыдущий адрес страницы, чтобы вернуться назад, если это - страница моего сайта, или перейти на главную, если предыдущая страница - чужая (например, пользователь сразу ввел в поиске www.my-site/login)?
1) document.referrer остается пустым при переходе с чужой страницы на мой сайт и при переходе по страницам сайта.
document.referrer.includes(window.location.origin) - всегда false, т.к. document.referrer пустой.

"use client";
import { usePathname } from 'next/navigation';
import { useEffect} from 'react';

export default function IsExternal() {
  const pathname = usePathname();  

  useEffect(() => {   
    console.log("document.referrer", document.referrer);  // всегда пустой    
      const cameFromExternalSite = !document.referrer.includes(window.location.origin);  // всегда true 
      
      if(cameFromExternalSite){
           sessionStorage.setItem("prevPath", "external" );
      }    
     
      console.log("Внешний переход:", cameFromExternalSite);  // всегда true    

  }, [pathname]);
  return null;
}

2) пробовала sessionStorage, но не смогла получить предыдущую страницу

"use client";

import { usePathname,  useSearchParams } from 'next/navigation';
import { useEffect, useRef } from 'react';

export default function TrackPreviousPage() {
  const pathname = usePathname();
  const prevPath = useRef(null);
  const previousPage = document.referrer;
  const currentOrigin = window.location.origin;  

  useEffect(() => {  
    if (prevPath.current) {
      sessionStorage.setItem("prevPath", prevPath.current); // записывает текущий адрес, а не предыдущий
    }
    prevPath.current = pathname;
  }, [pathname])

  return null
};
  • Вопрос задан
  • 31 просмотр
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • OTUS
    Fullstack developer
    14 месяцев
    Далее
  • Учебный центр IBS
    WEB-023 React Advanced: продвинутые темы
    1 неделя
    Далее
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы