如何在首次页面加载前,在登录后更改主页

我有一个登陆页面主题组件,地址是 https://ejopa.discourse.group/

它运行得很好。我需要它不显示给已登录用户。我有这段代码,它在初始化程序中设置了主页:

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

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

它运行得很好,除了他们第一次登录时。他们会被重定向到 /custom – 如果他们点击图标,他们会去正确的地方,但在第一次加载时不行。

我需要做一些事情来在他们登录时将他们重定向到正确的主页。

AI 建议了类似这样的代码,但似乎不起作用

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

编辑! 差不多了,但登录后会闪现登陆页面

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 || ""; // 防止出现 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);
});

我恐怕这就是我能做的最好的了。我说错了吗?

[quote=“pfaffman, post:1, topic:369042”]它工作得非常好,除了他们第一次登录时。[​quote]
我想知道这是否可能是由于 redirect_users_to_top_page 设置引起的,因为这也会在首次访问时重定向用户。但由于您最终到达的是 /custom 而不是 /top,因此可能不是这种情况。

我试着找过,但记不起它叫什么名字了!

对了。

还有“自动重定向新用户和长期未登录用户”,我们既不是新用户也不是长期未登录用户。。。

非常感谢!

1 个赞