Задать вопрос
@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
};
  • Вопрос задан
  • 101 просмотр
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Stepik
    AI на Django и Next II
    1 месяц
    Далее
  • Яндекс Практикум
    Вайбкодинг: максимальная версия
    3 месяца
    Далее
  • Учебный центр IBS
    WEB-023 React Advanced: продвинутые темы
    1 неделя
    Далее
Пригласить эксперта
Ваш ответ на вопрос

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

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