Como alterar a página inicial após o login antes que a primeira página carregue

Tenho um componente de tema de página de destino em https://ejopa.discourse.group/

Funciona muito bem. Preciso que ele não seja exibido para usuários logados. Tenho este código, que define a página inicial no inicializador:

export default apiInitializer((api) => {
  const siteSettings = api.container.lookup("service:site-settings");
  const topMenu = siteSettings.top_menu || ""; // protege contra undefined
  const globalDefaultHomepage = topMenu.split("|")[0].trim();
  const currentUser = api.getCurrentUser();

  if (currentUser && defaultHomepage() === "custom") {
    setDefaultHomepage(globalDefaultHomepage);
  }
  api.renderInOutlet("custom-homepage", LandingPage);
});

Funciona muito bem, EXCETO na primeira vez que eles fazem login. Eles são redirecionados para /custom – se clicarem no ícone, eles vão para o lugar certo, mas não no primeiro carregamento..

Preciso fazer . . . algo . . . para redirecioná-los para a página inicial correta quando eles fizerem login.

A IA sugeriu algo como isto, que não parece funcionar

      api.onAppEvent('application:after-login', afterLoginHandler);

EDIT! Quase lá, mas pisca a página de destino após o login

import { apiInitializer } from "discourse/lib/api";
import { defaultHomepage, setDefaultHomepage } from "discourse/lib/utilities";
import LandingPage from "../components/landing-page";

export default apiInitializer((api) => {
  const siteSettings = api.container.lookup("service:site-settings");
  const topMenu = siteSettings.top_menu || ""; // protege contra undefined
  const globalDefaultHomepage = topMenu.split("|")[0].trim();
  const currentUser = api.getCurrentUser();

  api.onPageChange((url) => {
    const isCustom = url === "/custom";
    const router = api.container.lookup("service:router");
    const currentUser = api.container.lookup("service:current-user");
    if (currentUser && isCustom) {
      router.transitionTo("discovery." + defaultHomepage());
    }
  });

  if (currentUser && defaultHomepage() === "custom") {
    setDefaultHomepage(globalDefaultHomepage);
  }
  api.renderInOutlet("custom-homepage", LandingPage);
});

Tenho medo de que este seja o melhor que posso fazer. Estou errado?

Eu me pergunto se isso poderia ser devido à configuração redirect_users_to_top_page, porque isso também redireciona o usuário na primeira visita. Mas como você termina em /custom e não em /top, provavelmente não é o caso.

Tentei encontrar isso, mas não me lembrava como se chamava!

Certo.

E também “Redirecionar automaticamente usuários novos e ausentes há muito tempo”, e nós não somos nem novos nem ausentes há muito tempo. . .

Muito obrigado!

1 curtida