説明
標準の絵文字パスはCDN URLに変換されませんが、管理者の絵文字パスは正しく変換されます。
証拠
標準コントローラー(CDN変換なし):
管理者コントローラー(EmojiSerializerを使用した正しい変換):
標準の絵文字パスは、管理者絵文字パスのようにCDN URLに変換されるべきです。
標準の絵文字パスはCDN URLに変換されませんが、管理者の絵文字パスは正しく変換されます。
標準コントローラー(CDN変換なし):
管理者コントローラー(EmojiSerializerを使用した正しい変換):
標準の絵文字パスは、管理者絵文字パスのようにCDN URLに変換されるべきです。
UIでこれらのURLが使用されているのが見えますか?それらがJSアプリでCDN URLに変換されてから表示されるのではないかと疑っています。
絵文字は、レンダリングされた出力でCDN URLではなく、直接S3 URL(//で始まる)を使用していることを確認しました。
これはどのページで表示されますか?
絵文字ピッカーを使用している際に、投稿作成ページでこれを確認できます。カスタム絵文字が読み込まれると、次のようなS3エンドポイントが直接使用されます。
https://assets-meta-cdck-prod-meta.s3.dualstack.us-west-1.amazonaws.com/original/3X/1/d/1de8f76096f76cf393640bdcff387ec9ae33dd3e.gif
これは、パスが期待どおりにCDN URLに変換されていないことを示しています。
カスタム絵文字をテスト中 ![]()
これはS3 CDNから配信されています…ピッカー自体に問題があります @j.jaffeux
カスタム絵文字からS3 CDNを使用していません
このUIはS3 CDNを使用しています
したがって、これは絵文字ピッカーに非常に特有な問題です。タイトルを改善します。
これで直るはずです。
カスタム絵文字のCDN利用を可能にしていただきありがとうございます。
フロントエンドの修正により絵文字CDNアドレスが正しくリクエストされていますが、バックエンドのセキュリティについて懸念があります。
https://meta.discourse.org/emojis.json エンドポイントは、依然として //assets-meta-cdck-prod-meta.s3.dualstack.us-west-1.amazonaws.com/original/3X/6/1/61e481320406f0f82ed780db3f04056128191613.png のようなS3ソースURLを公開しており、悪意のある乱用や過剰なS3請求につながる可能性があります。
より良いセキュリティのために、カスタム絵文字以外の絵文字が処理されているのと同様に、CDNアドレスを直接返すことをお勧めします。
以下に修正コードの試案を示します。
class EmojisController < ApplicationController
def index
emojis = Emoji.allowed.group_by(&:group)
emojis.each do |_, emoji_list|
emoji_list.each do |emoji|
emoji.url = Discourse.store.cdn_url(emoji.url) if emoji.url.present?
end
end
render json: MultiJson.dump(emojis)
end
def search_aliases
render json: MultiJson.dump(Emoji.search_aliases)
end
end
はい、emoji.rb でカスタム絵文字以外のものを直接処理していることは承知しており、コントローラーよりもそちらの方が望ましいです。しかし、これが問題を引き起こさないことを確認したいので、今は最も簡単な修正を行いましたが、将来的に詳しく調査します。
元の問題が解決したため、閉じます。フォローアップについては、別の機能リクエストを自由にオープンしてください。
これらのアセットは小さく、一般に公開されているため、リスクは低いと思われます。