こんにちは、Discourse 初心者で初投稿です。温かく見守ってください!
以下の解決策が可能かどうか教えていただけますか?
シナリオ:
- Drupal サイトを持っている
- Drupal サイト上にユーザー認証が必要なコンテンツがある(「制限付き Drupal コンテンツ」)
- Drupal と Discourse の間に SSO がある
問題:
- Discourse ユーザーが「制限付き Drupal コンテンツ」へのリンクを投稿に貼り付けると、403 エラーメッセージが表示される。「申し訳ありませんが、この Web ページのプレビューを生成できませんでした。Web サーバーがエラーコード 403 を返したためです。プレビューの代わりに、投稿にはリンクのみが表示されます。」
望ましい解決策:
- 制限付きコンテンツへのリンクを貼り付けた Discourse ユーザーが、そのコンテンツにアクセスできる場合、自動的にプレビューが表示される
これまでの発言には曖昧さがあります。Drupal リンクが含まれる Discourse の投稿を表示する際、Onebox プレビューが依存すべきなのは、
- 閲覧者の Drupal アクセス権限
- 投稿者の Drupal アクセス権限
のどちらでしょうか。
いずれにせよ、Discourse 側のアクセス権限の問題として扱えるようにすれば、対応が容易になります。Drupal のロールに基づいて Discourse グループへの自動割り当てを設定できます。これは、Drupal と Discourse の SSO モジュールを使えば比較的簡単に行えます。
また、Onebox プレビューのクローラーが制限されたコンテンツにアクセスできるようにするため、Drupal 側でカスタムのアクセス制御ロジックが必要になる場合もあるかもしれません。
特定の視聴者にのみコンテンツを表示させたい場合は、何らかのスクリプトを使用してコンテンツを制御する必要があると思われます。コンテンツが視聴者ではなく、作成者に依存する方がはるかに簡単になるでしょう。
迅速なご返信ありがとうございます。プレビューは、Discourse のトピックやコメントを作成したユーザーのアクセス権に依存し、閲覧者の権限には依存しないと考えていました。
プレビューを、投稿に紐付くフラットな HTML として生成・保存されるスナップショットとして捉えており、動的なウィジェットである可能性は全く考慮していませんでした!
私の理解が正しければ、これは Discourse 側でのスクリプトによるカスタマイズ、および/または Drupal 側でのカスタムアクセスロジックによって実現可能でしょうか?
Drupalで、ログイン/有料壁の前にプレビューを表示できるように設定することは可能ですか?
Drupalの投稿のメタプロパティにアクセスできれば、ワンボックス化は問題なく機能するはずです。
ホスト型(エンタープライズ版ではない)の Discourse プロダクトでは、onebox はこの要件を満たすようにカスタマイズできないようです。
少なくともメタデータを公開可能にすることが、この問題に対処する唯一の手段だと考えられます。
ご回答いただき、ありがとうございます。