古いメールアドレスに+を含む新しいサインアップがREST APIで機能しない

最近のアップデートで、同じメールアドレスにプラス記号(+)を追加して新しいメールアドレスとして登録することができなくなったようです。私のシステムはこの機能に大きく依存しています。再度有効にするにはどうすればよいですか?

例えば、すでに email@gmail.com で登録している場合、email+1@gmail.com で登録できません。

ちなみに、これはREST APIでテストしています。

また、このオプションはチェックされていません。

「メールの正規化」という管理者設定のことだと思います。:+1:

編集: 投稿する前にその編集に気づきませんでした。:slight_smile:

「いいね!」 1

はい、私にとってはすでに無効になっています

「いいね!」 1

try.discourse.orgでは再現できません。

このメールアドレスで通常のUIからサインアップできますか?

また、+1メールがすでにサインアップに使用されていないか再確認していただけますか?

「いいね!」 1

はい、通常のUIは問題ありません。REST APIは問題ありません。

まったく同じことをしましたが、本番環境で実行されている最新のコードでは問題を再現できませんでした。normalize emails 設定が無効になっている場合、期待どおりに動作しました。

Rails コンソールからこれらの出力を表示してもらえますか?

[1] pry(main)> SiteSetting.normalize_emails

[2] pry(main)> User.find_by_email('YOURUSERNAME@gmail.com').username

[3] pry(main)> User.find_by_email('YOURUSERNAME+1@gmail.com').username

また、お使いの Discourse のバージョンは何ですか?

本番サイトではなくテストサイト(またはその逆)にアクセスしている可能性も再確認してください。

「いいね!」 2

今すぐ更新しました

こちらです

これは何と翻訳されますか?

(そして、ここにコピー&ペーストできますか?)

最初にそれを尋ねるべきでした🤦‍♂️

「プライマリメールアドレスはブロックされています。」
これは user.email.blocked の翻訳です

うーん
正規化されたメールがブロックされているようです。:thinking:

つまり、email@gmail.com がブロックされている場合、email+1@gmail.com もブロックされているということです。正規化オプションが選択されていない場合、これは奇妙です。

それが、まず確認せずに「すでに取得済み」だと決めつけてしまった理由です🤣

メールとユーザーのカテゴリで、どのような設定が上書きされていますか?

そのメールアドレスや、例えばGmailドメインをブロックしましたか?

「いいね!」 1

理解できませんでした。どこで確認すればよいですか?

はい、正規化されたメールがブロックされていることがわかります。

この場合、正規化オプションはデフォルトではないため、アンチグレフ対策として、設定に関係なくブロックされたアドレスのサブアドレスをほぼ確実にブロックします。

設定の「オーバーライドのみ表示」です。しかし、今は心配する必要はないと思います。

「いいね!」 2

デスクに戻って、この拒否を行う実際のコードを確認しました。

一番上で、正規化されたメールアドレスをブロックリストに対してチェックしています。

  def self.canonical(email)
    name, domain = email.split("@", 2)
    name = name.gsub(/\+.*/, "")
    name = name.gsub(".", "") if %w[gmail.com googlemail.com].include?(domain.downcase)
    "#{name}@#{domain}".downcase
  end

それでも捕捉されなかった場合でも、ここではレーベンシュタイン距離のチェックで捕捉されます。

[1] pry(main)> Screened.canonical('fakezabanshenas@gmail.com', 'fakezabanshenas+1@gmail.com')
=> 2

SiteSetting.levenshtein_distance_spammer_emails のデフォルト値は 2 です。

「いいね!」 2

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.