皆さん、こんにちは!フォーラムユーザーの一人が、当社のウェブサイトからフォーラムにログインするためにアカウントを使用できず、このエラーが発生しました。他のユーザーアカウントには問題ありませんが、彼のアカウントだけです。フォーラムを最新バージョンに更新すれば解決できるかもしれないと思いましたが、問題はまだ解決していません。
何かアイデアはありますか?どんな助けでも感謝します。
ログイン設定に特別なことはありますか、それともこのユーザーに特に何かありますか?以前、管理者アカウントに関して同様のエラーを見たことがあると思いますが、提供していただける情報が多いほど良いです。![]()
/logs にエラーは表示されていますか?
返信ありがとうございます!
/var/discourse/shared/standalone/log/rails のログのことでしょうか?
どのようなエラーが記録されているログですか?
production.log または production_errors.log ですか?
後者は空です。
[YourSite]/logs のログのことですか、それともログインを試みたときにブラウザコンソールに何か表示される可能性はありますか?そこには、絞り込みに役立つ追加情報があるかもしれません。
非スタッフユーザーですか、またSSOは有効になっていますか?
はい、すべてのユーザーがSSOでログインできると思います。フォーラムにログインするためにアカウントとパスワードを再度入力する必要がないからです。ウェブサイトからフォーラムに直接転送されます。
コンソールにエラーがあります。
ウェブ上の可能性のあるエラーログは次のとおりです。
ActiveRecord::RecordInvalid (validation failed: Primary email already adopted) app/models/discourse_connect.rb:270:in block in match_email_or_create_user' lib/distributed_mutex.rb:53:in block in synchronize’ lib/distributed
この特定のユーザーは、メインサイトとは異なるメールアドレスをDiscourseで使用しているようです。確認していただけますか?
はい、Discourseユーザーパネルに表示されているメールと、メインサイトのメールを確認しましたが、同じです。
調べてみたところ、相手のメールアドレスが誤ってブロックリストに追加された可能性が考えられます。/admin/logs/screened_emails ページで検索して、その場合は確認できます。もしそこに見つかったら、ブロックを解除することで解決するかもしれません。
(/admin/logs/screened_ip_addresses でIPアドレスを確認するのも価値があります)
それでも解決しない場合は、SSOを有効にする前に相手がフォーラムアカウントを持っていたという可能性もあります。どのようなSSOを使用していますか?
/admin/logs/screened_ip_addresses を確認しましたが、空でした。
すみません、おっしゃっている意味が分かりません。(「どのSSOを使用していますか」)SSOには多くの種類があるのですか?
Discourse Connectまたは他の何かを使用しているのか、また、ユーザー認証を提供するためにWordPressなどに接続しているのかどうかを知りたいと思っていました。
以前にもこのエラーを確認しています。チケットシステムで検索しました。
これは、以下のような場合に発生します。
require activationがtrueに設定されている- Discourse に特定のメールアドレスを持つユーザー U1 がいる(外部 ID が A である可能性あり)。
- DiscourseConnect プロバイダー側に、同じメールアドレスで異なる外部 ID(B)を持つユーザー U2 がいる。
ユーザーがログインすると、Discourse は外部 ID B を持つユーザーが存在するかどうかを確認しますが、存在しません。
通常、Discourse は次のステップとしてメールアドレスで照合を行いますが、require activation が設定されているため、メールアドレスは信頼されず、このステップはスキップされます。これにより、アカウント乗っ取りが可能になるため、ユーザー U1 とは関連付けられません。
そのため、Discourse は新しいユーザーを作成しようとしますが、そのメールアドレスは既にユーザー U1 によって使用されているため失敗します。
メールアドレスが存在するものの信頼できない場合に、より適切なエラーメッセージが表示されると良いでしょう。また、なぜ一般的な Rails エラーが表示されるのかも不明です。
解決策:
- DiscourseConnect プロバイダー側のメールアドレスが検証済みで信頼できる場合は、
require activationをfalseに設定します。
または - ユーザー U1 の外部 ID を B に変更します。
または - ユーザー U1 のメールアドレスを別のものに変更します。
このトピックがこのエラーを検索するユーザーに見つけられるように、「求めていた変更は却下されました」というテキストを追加します。
はい、Discourse Connect を使用しており、サイトに接続しています。
詳細なご返信ありがとうございます!当サイトのメールアドレスは、ユーザーがログインする際に検証されます。そのため、まずは方法1で問題を修正してみます。しかし、管理者の設定で「メール認証を必須にする」という項目が見つかりませんでした。
SSOプロセス中に返されるパラメータです。Disable email verification for SSO - #4 by simon を参照してください。
WP Discourse プラグインを認証に使用しているサイトでは、サイト管理者はユーザーの環境設定ページから個々のユーザーのメールアドレスを検証済みとしてマークすることもできます。
これは、サイト上のすべてのユーザーのメール検証を無効にするよりも安全で簡単です。
いつから発生するようになったのか疑問です。私が確信しているのは、あなたが説明しているシナリオでは、以前は「アカウントに問題があります。サイト管理者に連絡してください。」というエラーメッセージが生成されていたということです。
[Setting 'min username length' greater than 5 breaks granting and revoking Admin/Moderator permissions) ここ) は、このエラーを返す失敗したRailsバリデーターの別のケースであり、それは6.5年前のものです。DiscourseConnectのコンテキストでは、これは過去数か月でしか見ていないものです。
Discourseのイメージを使用しているので、env:にrequire_activation=trueを追加するだけでよいのでしょうか?
ご協力ありがとうございます。しかし、WPは使用していません。Discourse Dockerイメージを使用しています。それを設定する正しい方法は、app.ymlファイルのenv:にrequire_activation=trueを追加することですか?
いいえ、Login error - #17 by RGJ で以前投稿したように、このパラメーターはユーザーごとに渡す必要があります。カスタム実装の場合は、サーバー側のコードを変更する必要があります。


