Rocket.Chat SSO + embed plugin

image

概要: このプラグインは、Rocket.Chat と Discourse を統合します。

Communiteq、Digital Ocean、または他のプロバイダーなど、別途 ホスト型の Rocket.Chat インスタンス を取得する必要があります。このプラグインは、そのインスタンスをあなたのフォーラムと統合します。

統合は以下の 2 つの部分で構成されています:

  • Discourse ユーザーインターフェース内へのチャットの埋め込み
  • Discourse と Rocket.Chat 間のシングルサインオン(SSO)。Discourse が認証プロバイダーとして機能し、Rocket.Chat でのユーザーの認証、作成、更新を行います。

:link: GitHub: GitHub - communiteq/discourse-rocketchat · GitHub
:arrow_right: インストール: プラグインのインストールガイド に従ってください。
:pray:t3: クレジット:@jrgong 氏は、Rocket.Chat と Discourse の統合という素晴らしいアイデアを考案し、ユーザーインターフェースの初期バージョンの開発も行いました。

スクリーンショット

チャットは Discourse インターフェースの右下に埋め込まれています。タイトルバーをクリックすることで折りたたんだり展開したりできます。フォーラムを移動してもチャットは開いたままになります。

モバイルでは、チャットは全画面表示となり、上部バーにある Rocket.Chat アイコンからアクセスできます:

設定

この統合には、両方のシステムでの設定が必要です。Discourse はユーザーインターフェースにチャットを統合するためにチャットの場所を知る必要があり、Rocket.Chat は認証を行うために Discourse の場所を知る必要があります。

Discourse 側

管理 - プラグイン - Discourse RocketChat - 設定

discourse_rocketchat_enabled
プラグインを有効または無効にします。

discourse rocketchat title
チャットウィンドウのタイトルを設定します(例:Chat)。

discourse rocketchat host
RocketChat インスタンスのホスト名を設定します(例:chat.example.com)。
https:// などのプレフィックスは付けないでください。

discourse rocketchat default channel
デフォルトのチャンネルを設定します(例:General)。

discourse rocketchat min trust level
Rocket.Chat を使用できるユーザーの最小信頼レベルを設定します(例:2: member)。

discourse rocketchat click entire bar
チャットを展開または非表示にするために、タイトルバー全体をクリック可能にしたい場合はこれを有効にします。‘Open’ と ‘Close’ のテキストのみをクリック可能にしたい場合は無効にしてください。

discourse rocketchat show menu for groups
Rocket.Chat のメニューを表示するグループを設定します(例:staff)。

Rocket.Chat 側

管理 - 設定 - CAS

この統合では、認証と認可のために CAS 2.0 プロトコルを使用します。

forum.example.com をあなたのフォーラム名に置き換えてください。

  • SSO Base URL: https://forum.example.com/rocketchat
  • SSO Login URL: https://forum.example.com/rocketchat/login
  • CAS Version: 2.0
  • Trust CAS username: 有効
  • Allow user creation: 有効
  • Enabled: 有効

管理 - 設定 - CAS - 属性処理

メールアドレスとフルネームを同期できるようにするには、それらの属性がどこにあるかを設定する必要があります。

  • Always Sync User Data: 有効
  • Attribute Map: {"email":"%email%", "name":"%name%"}

管理 - 設定 - 一般

Rocket.Chat を iFrame 内で実行できるようにする必要があります。

  • Restrict access inside any Iframe: 無効

管理 - 設定 - アカウント

2 つのプラットフォームを統合するには、Discourse がログインと登録、およびアカウントのフルネーム、名前、メールアドレスを制御している必要があります。Rocket.Chat 側で以下の設定を無効にする必要があります:

  • Allow User Avatar Change: 無効
  • Allow Name Change: 無効
  • Allow Username Change: 無効
  • Allow Email Change: 無効
  • Show Default Login Form: 無効

管理 - 設定 - アカウント - 登録

  • Registration Form: 無効
  • Registration Form Secret URL: (ランダムな文字列)

管理 - 設定 - アカウント - アバター

Rocket.Chat は Discourse のアバターを使用できます。
forum.example.com をあなたのフォーラム名に置き換えてください。

  • Avatar External Provider URL: https://forum.example.com/rocketchat/avatar/{username}.png
「いいね!」 20

私はこのプラグインをしばらく使用している顧客の一人ですが、本当に素晴らしいです!!!

余談ですが、@RGJ さん、トピックのタイトルに「既存の Discourse インスタンスに RC を統合するための SSO + Embed ソリューション」であることを追記していただけませんか?

Babble Chat の代替として実用的なソリューションをお探しの皆様、これはまさに聖杯です!

「いいね!」 9

とても素敵ですね!

アバターURLに関する一点だけ。このURLを使用すると、デフォルトのアバター(色付き背景に文字)を持つユーザーの画像は表示されず、カスタム画像やGravatarのみが表示されます。すべてのアバターを含む別のURLをご存知の方がいれば教えてください :slight_smile:

「いいね!」 2

素晴らしいご指摘をありがとうございます、@DiscourseMetrics
そのような URL の存在は存じ上げませんでしたので、プラグイン内に実装しました。これにより、Gravatar かアップロードされた画像か、あるいはイニシャル画像かを問わず、https://forum.example.com/rocketchat/avatar/{username}.png で任意のアバターを取得できるようになりました。

「いいね!」 5

これは素晴らしいですね!残念ながら、これを有効にすると私のdヘッダーが消えてしまいます。原因がわかるでしょうか?

「いいね!」 1

ふむ… gazillion のテーマコンポーネントを多数使用されているため、直接アクセスなしでのデバッグは困難です。

非プレフィックス付きクラス(.collapsible)を使用していたことに気づきました。これは競合を引き起こす可能性が高いため、このクラスには現在プレフィックスを付与しました。

「いいね!」 2

リチャード、ありがとうございます。残念ながら、それは機能しませんでした。また、他のサイトのいずれかにインストールし、すべてのプラグインと TC を無効にしてみましたが、それでも発生しています。ご覧の通りです Exploring Exposure - Exploring Exposure Discussions

「いいね!」 2

このプラグインは stable ブランチに対してのみ開発・テストを行っていたことに気づきました。2.8.x 環境ではエラーが発生し、クラッシュしてしまいます。調査の上、修正いたします。ご報告ありがとうございます!

@davidkingham 問題を修正しました。再ビルドして再度テストしていただけますでしょうか?

「いいね!」 4

このプラグインをありがとうございます。非常に役立っています!

ただ、2点あります:

  • 現在、統合のチャット埋め込み部分のみをテストしています。
    プラグインの SSO 機能は、自動ログインとのシームレスな統合を可能にしますか?それとも、Rocketchat にログインする際に(パスワードを入力することなく)SSO ログインボタンをクリックする必要がありますか?
    現在、Rocketchat と Nextcloud 間の SSO 統合でこの問題に直面しており、これまで SSO ボタンをクリックせずに Rocketchat に自動ログインする方法を見つけられませんでした。

  • 埋め込みチャットをデフォルトのチャンネルではなく、Rocketchat のホームページで開くように設定することは可能でしょうか?
    現在、デフォルトのチャンネルを設定するオプションしかありませんが、埋め込みチャットが Rocketchat のカスタマイズ可能なホームページでも開くようにできれば、非常に役立つと思います。
    (これについて GitHub リポジトリで こちら に issue を作成しましたが、誰かを迷惑させないことを願っています)。

貴重なご貢献を心より再度感謝申し上げます!

「いいね!」 1

このソリューションは phpfox で「ChatPlus」として利用されています。そこでは、古いチャットのすべてのメッセージを Rocket Chat に移行できます。このような機能の追加をお考えでしょうか?

どの「古いチャット」のことをおっしゃっていますか?これは Rocket.Chat の機能というより、Discourse の機能のように思えますが、私の理解が間違っていますか?

このスクリプトを Rocket.Chat の「未ログインユーザー向けのカスタムスクリプト」として設定してください(2 行目のホスト名をフォーラムのドメイン名に置き換えることを忘れないでください)。注:私は最近このスクリプトをテストしていません。もし動作しない場合、お手伝いできるか確信が持てません。

const credentialToken = Random.id();
const login_url = "https://discourse.example.com/rocketchat/login";

const appUrl = Meteor.absoluteUrl().replace(/\/$/, '') + __meteor_runtime_config__.ROOT_URL_PATH_PREFIX;
const delim = (login_url.split('?').length > 1) ? '&' : '?';

var i = document.createElement('iframe');
i.style.display = 'none';
i.onload = function() { 
    Accounts.callLoginMethod({
        methodArguments: [{ cas: { credentialToken } }],
    });
};
i.src = `${ login_url }${ delim }service=${ appUrl }`;
document.body.appendChild(i);

数週間後にそれについて調査する予定です。自分が忘れないように、Github の issue は開いたままにしておきます。

phpfoxには、ネイティブチャットからRocket.Chat(ChatPlus)へすべての古いメッセージを転送する機能があります。Discourseでも同様に、Rocket.Chatのみをチャットとして使用できるようにすることは可能でしょうか?そうすれば、すべての古いメッセージが失われることなく、すでに多くのメッセージが存在する既存のフォーラムでもこのプラグインを利用できます。

Discourse にはネイティブのチャット機能がないため、これらのメッセージはどこから来るのでしょうか?
また、チャット(フォーラムと対照的に)の背後にある考え方は、チャットメッセージが一時的で流動的であることです。

「いいね!」 1

つまり、プライベートメッセージのことです。

ああ、なるほど。その場合、いいえです。
これは本当に問題なのかどうかはわかりませんが、PM を無効にしても Rocket.Chat プラグインを有効にすると、この機能が引き続き利用可能です:

「いいね!」 2

非常に有益なご返信をいただき、誠にありがとうございます。
以前、あなたが投稿されたこのスクリプト こちら を拝見していましたが、CAS 認証専用であり、SSO 用ではないと誤解しておりました。実際に試して、ブラウザが隠しウィンドウをブロックしないか確認いたします。

本当にありがとうございます!私の考えでは、埋め込みチャットウィンドウでもホームページをデフォルトにできるのは非常に興味深い機能追加になると思います。もしお時間が取れるようでしたら、いつか実装されることを楽しみにしております。このオプションの追加を検討いただき、感謝申し上げます。

返信ありがとうございます。チャットに Rocket.Chat の代わりに Mattermost または MongooseIM を使用することは可能でしょうか?Mattermost は Go で書かれており、リソース消費が少なく、スケーラビリティに優れています。それとも、これは Rocket.Chat でのみ可能なのでしょうか?

いいえ、これは Discourse 用の Rocket.Chat プラグインです…

このプラグインは、SSO 機能を確立するために CAS 2.0 プロトコルを使用します。

チャットをフォーラムに合うように再設計することは可能ですか?CSSで実現できますか?ありがとうございます。

これで質問に答えられましたか?https://developer.rocket.chat/guides/developer/ui-and-theming

「いいね!」 1