Как в Gatsby перенаправить аутентифицированных пользователей с домашней страницы / в / app без вспышки контента?

Я пытаюсь реализовать общий пользовательский интерфейс для веб-приложений, в котором аутентифицированные пользователи автоматически перенаправляются с домашней страницы в приложение.

Например, при вводе https://example.com/ в браузере, если я не вошел в систему, я вижу домашнюю страницу. Но если я вошел в систему, я автоматически перенаправляюсь на https://example.com/app/

Сейчас у меня в pages/index.js есть это:

if (auth.user) return <Redirect noThrow from="/" to="/app" />;

где Redirect от @reach / router.

Однако, когда я это делаю, неаутентифицированная домашняя страница на короткое время мигает, прежде чем сработает перенаправление. Есть ли способ сделать это так, чтобы:

  1. Перед тем, как произойдет перенаправление, не будет вспышки содержимого И
  2. Домашняя страница по-прежнему создается статически, поэтому она правильно индексируется Google для SEO.

Спасибо!


person stevenkkim    schedule 11.09.2020    source источник


Ответы (1)


Вам потребуется, чтобы ваш сервер ответил на запрос домашней страницы кодом ответа 301–303 и заголовком Location, указывающим на желаемый URL (например, /app/).

Гэтсби не запускает какой-либо сервер для ответа на запросы в производстве, увы, поэтому вы не можете решить эту проблему, используя один только Гэтсби, без каких-либо существенных хаков, таких как скрытие всего вашего контента по умолчанию, что приведет к тому, что контент не будет индексироваться Google.

person coreyward    schedule 11.09.2020
comment
Спасибо за ответ Кори, я волновался, что это может быть ответ. Вероятно, сейчас это вопрос SEO, но мне интересно, достаточно ли умен сканер Google, чтобы дождаться регидратации страницы, если я скрою контент по умолчанию, а затем покажу с помощью хука useEffect. - person stevenkkim; 12.09.2020
comment
Я подозреваю (и надеюсь), что сканер Google действительно сможет справиться с этой ситуацией, потому что я понимаю, что сканер Google может запускать / отображать содержимое javascript, например веб-приложения, в которых страница создается с помощью javascript. - person stevenkkim; 12.09.2020
comment
@stevenkkim Речь идет не столько о том, может ли Google индексировать контент, сколько о штрафах, которые они налагают, если вы не визуализируете контент на стороне сервера. При таком подходе вы также получаете существенное поражение кеша. Я действительно не рекомендую это. - person coreyward; 12.09.2020
comment
Спасибо, Кори, я думаю, ты прав - это не стоит риска наказания. Я ценю ваш отзыв! - person stevenkkim; 14.09.2020