
WooCommerce ソーシャルログインで Facebook 連携時に Constant Contact が切断される原因と対処
WooCommerce にソーシャルログインを導入しているサイトで、ユーザーが Facebook アカウントを初めて連携しようとすると Constant Contact Forms の接続が切れる症状は、OAuth トークン処理の競合が起きている。Constant Contact Forms を無効化すると Facebook 連携が成功することから、プラグイン同士の干渉を切り分け、接続をリセットするのが解決の出発点だ。
なぜ Facebook 連携で Constant Contact が切断されるのか

この症状は、WooCommerce Social Login が Facebook の認可コードを処理するタイミングで、Constant Contact Forms の保有する OAuth トークンが無効化されることが原因だ。Constant Contact Forms のデバッグログに「invalid_grant(認可コードが無効または期限切れ)」と記録されるのは、API トークンの再取得時に、すでに使われたか上書きされた状態のコードを参照していることを示している。
両方のプラグインは、OAuth2 という同じ認証の仕組みを使う。Constant Contact Forms はメール配信 API に接続するため、WooCommerce Social Login は Facebook や Google のアカウント認証のために、それぞれトークンを保存・更新する。この 2 つのプラグインが同じ WordPress の保存領域(オプションやセッション)を参照していると、Facebook 連携の処理が Constant Contact 側の認可コードを破壊して切断に至る。
重要なのは、Constant Contact の登録フォームをログイン画面やコメント欄に設置していなくても、この競合は起こり得る。ソーシャルログインの実行自体がバックグラウンドで Constant Contact の API 通信を誘発し、無効化されたトークンで再取得を試みて切断されるからだ。
プラグイン競合を切り分けて原因を特定する手順

ソーシャルログインと Constant Contact Forms のどちらが原因かを特定するには、片方ずつ無効化しながら動作を確認する。以下の手順は、両プラグインが同時に有効な場合の症状を、競合の組み合わせごとに明確にするためのものだ。
このデモは、競合の組み合わせを 4 段階で特定する流れを示している。STEP 2 で Facebook 連携が成功すれば、Constant Contact Forms が干渉していることが確定する。
Constant Contact Forms の接続を復旧する方法

競合が確認できたら、Constant Contact Forms のトークンをリセットして再接続し、WooCommerce Social Login との共存を調整する。最初に行うのは接続情報の完全な初期化だ。
このデモは、エラー状態と復旧後の違いを示したイメージである。復旧の手順は以下の 4 つに整理できる。
Constant Contact Forms の接続を完全にリセットする
管理画面の Constant Contact Forms 設定から接続を解除し、その後データベースに残ったトークン情報を削除する。具体的には wp_options テーブルにある constant_contact や cc_ を含む transient を対象にする。削除後、再度 Constant Contact アカウントに接続して新しいトークンを取得する。
Facebook を一時的にオフにして Google だけで運用する
WooCommerce Social Login の設定で Facebook を無効化し、Google アカウントのみ許可する。この状態で Constant Contact Forms の接続が安定するなら、Facebook の OAuth フローに固有の競合であることが濃厚だ。ユーザーには Google ログインを案内し、Facebook 連携の復旧を急ぐ必要がなければこのまま運用してもよい。
トークン保存領域の競合を確認する
両プラグインが同じ wp_options キーやセッション変数を参照していないか、wp_options テーブルの内容を直接確認する。特に _transient_ で始まるキーを調べ、両プラグインが似た名称のキーを使っている場合は、そのカスタマイズが必要か検討する。この作業はデータベースに詳しい担当者が行うのが安全だ。
ログインフックを制御して競合を防ぐ
Constant Contact Forms が wp_login や authenticate のフックでトークン更新を実行している場合、WooCommerce Social Login の処理中だけそのフックを外すカスタムコードが有効なことがある。この手法はテーマの functions.php か、独自の小規模プラグインに追加する。コードを書く前に必ずバックアップを取り、テスト環境で動作を確認する。
ソーシャルログインとメール配信プラグインを共存させる設定

接続後の動作テストを必ず行う
Constant Contact Forms を再接続したあとは、以下のテストを毎回実施する。新しいユーザーで Facebook アカウントを連携して、Constant Contact Forms の接続ステータスが維持されるか確認する。既存ユーザーの Facebook ログインでも問題が起きないか確認する。Constant Contact のデバッグログに invalid_grant が記録されていないか確認する。これをテンプレート化しておけば、プラグイン更新のたびに安全に検証できる。
プラグイン更新前に競合を確認する
WooCommerce Social Login も Constant Contact Forms も頻繁に更新される。特に片方のプラグインが OAuth ライブラリを更新すると、再び競合が発生する可能性がある。本番環境に反映する前に、ステージング環境で Facebook 連携と Constant Contact の接続維持を確認しておくのが確実だ。
よくある質問
Google アカウント連携では問題が起きないのに Facebook だけで起きるのはなぜ?
Facebook の OAuth フローと Google の OAuth フローでは、使用する認可コードの形式や保存方法が異なる。Facebook の処理が Constant Contact Forms のトークン保存領域と衝突しやすい組み合わせになることがある。
Constant Contact Forms が切断されたまま放置すると何が起きる?
メール配信フォームからの登録が Constant Contact のリストに反映されなくなる。サイト来訪者はフォーム送信が成功したように見えても、実際には配信リストに追加されていない状態が続く。
データベースの transient を削除しても安全?
有効期限が切れた transient を削除するのは安全だ。ただし、接続中のトークンが保存されている場合、削除すると再接続が必要になる。削除する前に対象のキー名を控えておき、バックアップを取ってから行う。
この競合は特定のバージョンだけで起きるのか?
バージョンに依存する部分もあるが、OAuth を共用するプラグインの組み合わせでは長年報告されている。プラグインのバージョンが古いままの場合は、まず両方を最新化してから再確認する。
この記事のポイント
- Facebook 連携時に Constant Contact Forms が切断されるのは OAuth トークン競合が原因
- デバッグログの invalid_grant は認可コードの無効化を示すサイン
- Constant Contact Forms を無効化すると Facebook 連携が成功するかで切り分ける
- 接続リセット後に Google のみ運用、または保存領域の分離で対処する
- 接続復旧後は新規ユーザーの Facebook 連携テストを毎回実施する

・ Reddit、Stack Overflow、WordPress.org フォーラムを日々巡回し、現場の悩みを拾い上げて記事化
・ WordPress、WooCommerce、Next.js などモダンWeb制作領域のトラブルシューティングが専門
・ 「検索しても答えが見つからなかった」を一つでも減らすことが目標
・ エラーメッセージから根本原因にたどり着く粘り強い調査が得意
・ 初心者がつまずきやすい箇所を先回りで解決する記事作りを心がけている
