gensym

プログラミングと読書、勉強に関するメモ

Phoenix の check origin エラー [Elixir]

Phoenix の本番環境で Websocket をいじっていると、突然エラーを吐き動かなくなった。

[error] Could not check origin for Phoenix.Socket transport.

This happens when you are attempting a socket connection to
a different host than the one configured in your config/
files. For example, in development the host is configured
to "localhost" but you may be trying to access it from
"127.0.0.1". To fix this issue, you may either:

  1. update [url: [host: ...]] to your actual host in the
     config file for your current environment (recommended)

  2. pass the :check_origin option when configuring your
     endpoint or when configuring the transport in your
     UserSocket module, explicitly outlining which origins
     are allowed:

        check_origin: ["https://example.com",
											                        "//another.com:888", "//other.com"]

サーバサイドをいじっていなかったので不思議に思って色々調べてみると、config ファイルで指定したホスト名と違ったためエラーになっていたらしい。
よく見ると config では example.com だったが、ブラウザはいつの間にか www.example.com になっていた。
この食い違いが原因だ。

修正は Endpoint に check_origin を指定する。

# config/prod.exs
#...
config :example, Example.Endpoint,
  check_orign: ["https://example.com", "//*.example.com"], # これを指定

どちらでアクセスしても無事動いた。
参考: elixir - How to fix error 'Could not check origin for Phoenix.Socket transport'? (Phoenix 1.2.1) - Stack Overflow