最新のDiscourseで壊れた
最近Discourseを更新したところ、このプラグインがサイトを壊しました。(はっきりさせておきますが、これはDiscourse自体よりも私のひどいハックの結果である可能性が高いです。現時点では解決策を見つける時間がないため、他の人のためにこの警告を残しておきます。)
| 概要 | contactタグが付いた任意のトピックの先頭に問い合わせフォームを追加します。フォームから送信された情報は、それを受信するように構成されたグループまたはカテゴリに送信されます。 |
|
| リポジトリリンク | https://github.com/jericson/discourse-contact-plugin | |
| インストールガイド | Discourseでプラグインをインストールする方法 |
特徴
有効にすると、コンタクトフォームプラグインは、contactタグが付いた任意のトピックの先頭にコンタクトフォームを配置します。フォームから送信されたデータは、contact_form_emailからメールを受信するように設定されたカテゴリまたはグループに送信されます。[1] 従来のコンタクトフォームと同様に、送信するためにサイトのアカウントを持っている必要はありません。
訪問者が見る可能性のあるものは次のとおりです。
これは通常の投稿であり、本文に含めたい指示を何でも含めることができることに注意してください。[2] 現在、フィールド名はハードコードされており、実際の検証は行われていませんが、下記のTODOセクションを参照してください。メッセージが送信されると、設定されたグループのメッセージフィードに表示されます。
メール通知の設定方法によっては、設定されたグループのメンバーがDiscourseからメールを受信することもあります。
設定
このプラグインを使用するには、新しいトピックまたはグループメッセージを作成するように着信メールを設定する必要があります。プラグインは実際にはメールを送信しないため、メールによる返信を設定する必要はありません。APIをハイジャックして、着信メールをシミュレートします。(とはいえ、メールによる返信は便利な機能です!)
特に、このプラグインには以下が必要です。
email_inおよびenable_staged_users
が有効になっていること。
有効にすると、contactタグが付いたトピックには、topic-above-postsプラグインアウトレットにコンタクトフォームが追加されます。
グループに送信する
人々はこのフォームを使用して個人情報を送信するため、結果を非公開グループに送信するのが最も安全なオプションです。
- 連絡先を処理するユーザーのために新しいグループを作成します。(私は通常、簡単にするために「Contact」と呼びますが、既存のグループを含む何でも構いません。)
- 連絡先情報を受け取るメンバーを追加します。
- アクセスオプションのいずれにもチェックを入れないでください。これは非公開グループである必要があります。
- グループの可視性を組織にとって適切に変更します。
- 「カスタム着信メールアドレス」を
contact_form_email設定と同じに設定します。(デフォルトでは「contact@example.com」ですが、変更できます。)
…
カテゴリに送信する
カテゴリ設定の「カスタム着信メールアドレス」を使用して、カテゴリに送信することも可能です。「アカウントを持たない匿名ユーザーからのメールを受け入れる」も有効にしてください。
ただし、カテゴリへの送信は連絡先情報には推奨されません! 万が一、カテゴリのアクセス許可が変更された場合、アクセスすべきでない人(または検索エンジン)に個人情報が公開される可能性があります。連絡先がグループメッセージに送信される場合、これは発生する可能性がはるかに低くなります。
連絡先フォームを追加できるユーザーを制限する
至る所に連絡先フォームが出現するのは非常に奇妙かもしれないので、contactタグを使用できるユーザーを制限したい場合があります。そのためには、新しいタググループを作成します。
/tagsページから、右上のレンチアイコンを選択します。- 「タググループの管理」を選択し、次に「
新しいグループ」を選択します。 - 適切な名前(例:「スタッフのみ」)を入力し、
contactタグを追加し、「タグは全員に表示されますが、次のグループのみが使用できます」を選択します。 - 連絡先フォームの追加を許可したいグループ(通常は「staff」または「admins」)を選択し、タググループを保存します。
変更履歴
- 2024年4月25日: アルファリリース。
TODO
- 変更を加えたときに何も壊れないことを確認するためにテストを設定したいです。特に、アカウントを持っていない人がデータを送信できることを確認したいです。
- テスト中に重大なデータ漏洩を発見しました。その特定の脆弱性は削除しましたが、テストに本当に助けが必要です。
- フォームは検証を行いません。唯一の実際の要件は、メールフィールドがメールのように見えることです。誰かがメールを追加せずに回答を残した場合、フォームは静かに失敗します。
- スパムや悪用に対する保護はありません。
- コードは、古い慣習を使用していた例に基づいて、非常に「my-first-plugin」の品質です。スタイルに関する提案は歓迎します。
- 連絡先フォームを「contact」タグの付いたトピックに関連付けるのは好きですが、面倒で不要かもしれません。単純化のために、連絡先フォームだけの新しいルートを追加することを検討しています。
- 連絡先データはデータベースに保存されますが、管理パネルで連絡先リストを表示できると便利かもしれません。
- フォームは現在の要件に合わせて固定されていますが、尋ねるフィールドについて柔軟性があると便利です。





