ランディングページテーマコンポーネントを 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);
});
これが私の最善の努力です。間違っていますか?