# ログイン後、最初のページが読み込まれる前にホームページを変更する方法

**URL:** https://meta.discourse.org/t/how-to-change-homepage-after-login-before-first-page-loads/369042
**Category:** Development
**Created:** [2025 年 6 月 5 日午後 5:44 UTC](https://meta.discourse.org/t/how-to-change-homepage-after-login-before-first-page-loads/369042 "2025-06-05T17:44:47Z")
**Posts on this page:** 3
**Page:** 1

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2025 年 6 月 5 日午後 5:44 UTC](https://meta.discourse.org/t/how-to-change-homepage-after-login-before-first-page-loads/369042/1 "2025-06-05T17:44:47Z")

</div>

ランディングページテーマコンポーネントを [https://ejopa.discourse.group/](https://ejopa.discourse.group/) で使用しています。

これはうまく機能していますが、ログイン中のユーザーには表示されないようにしたいです。初期化子でホームページを設定するコードは以下の通りです。

```plaintext
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 は次のようなものを提案しましたが、機能しないようです。

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

```

### 編集！ほぼ完了しましたが、ログイン後にランディングページが一瞬表示されます。

```plaintext
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);
});

```

これが私の最善の努力です。間違っていますか？

---

<div class="post-metadata">

### Author: ![Moin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/moin/32/554653_2.png) [@Moin](https://meta.discourse.org/u/Moin)
#### Post date: [2025 年 6 月 5 日午後 6:51 UTC](https://meta.discourse.org/t/how-to-change-homepage-after-login-before-first-page-loads/369042/2 "2025-06-05T18:51:12Z")

</div>

> [@pfaffman](#):
>
> 初めてログインするとき以外は、すべてうまく動作します。

`redirect_users_to_top_page` 設定が原因ではないかと疑問に思いますが、これも初回訪問時にユーザーをリダイレクトするものです。しかし、あなたは `/top` ではなく `/custom` で終わるので、これはおそらく関係ないでしょう。

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2025 年 6 月 5 日午後 7:33 UTC](https://meta.discourse.org/t/how-to-change-homepage-after-login-before-first-page-loads/369042/3 "2025-06-05T19:33:09Z")

</div>

> [@Moin](#):
>
> redirect\_users\_to\_top\_page

それを見つけようとしたのですが、名前を思い出せませんでした！

> [@Moin](#):
>
> /customで終了し、/topで終了しないため、これはおそらく該当しません。

その通りです。

それに、「新規ユーザーや長期間不在だったユーザーを自動的にリダイレクトする」という設定も、私たちは新規でも長期間不在でもありません。

どうもありがとうございました！
