我有一个登陆页面主题组件,地址是 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);
});
我恐怕这就是我能做的最好的了。我说错了吗?