/login へリダイレクトする初期ページを無効化

こんにちは

現在のページで表示される唯一の「ログイン」ボタンを押す必要を避けるため、現在、ゆっくりとしたリダイレクトを実装しています。

import { apiInitializer } from "discourse/lib/api";

export default apiInitializer("1.0", (api) => {
  api.onPageChange((url) => {
    const user = api.getCurrentUser();

    let path = url?.startsWith("http") ? new URL(url).pathname : url;
    path = path?.replace(/\/+$/, "") || "/";

    const allowedAnonPaths = ["/login", "/privacy", "/tos", "/pub/about-this-forum", "/safe-mode", "/pub/accessibility-statement"];

    if (!user && !allowedAnonPaths.includes(path)) {
      window.location.href = "/login";
    }
  });
});

これは、リダイレクトしたくないパスを除外するものです。


これは理想的ではありませんが、現在は https://physicswithethan.discourse.diy で運用されています。

Discourse はすでにそれを自動で行っているはずです。もし機能していないなら、設定に何か問題があるのかもしれません :thinking:

うーん、まずここにあるログインボタンをクリックする必要がありますね:

でも、私はそれで迷惑を感じたことはありません。自分がどこにいるかを確認せずに入力フォームに飛ばされる方が、良い体験だとは思いません。こちらの方が、自分がどこにいるかについての情報が少ないです:

ええと :man_facepalming: ホームページの特殊ケース処理を忘れていましたね……他のすべてのページは、すぐにログイン画面を表示すべきです。もしかしたら設定にしたほうがいいかもしれませんね :thinking:

@pmusaraj さんが、なぜホームページを特殊ケース処理したのか覚えていらっしゃいますか?

はい、ログインが必要なサイトのほとんどは、そのランディング画面を設けることで恩恵を受けます。例えば、新規登録が可能であれば、サインアップ/ログインボタンが表示されます。また、フォームを表示する前にコミュニティについて説明する場所も用意されます。

ただし、限られた特定のケースでは、この画面をスキップするオプションを提供しています。それは、サイトが外部ログイン方法を 1 つのみサポートしている場合で、以下の設定を通じて可能です:

実は、その設定は https://physicswithethan.discourse.diy で有効になっていました。

なので、このトピックを開始する前からの設定変更は行っていません。