あなたの問題にはセキュリティ上の懸念があります。実際に資格情報を渡さずに、ある Web サイトから別の Web サイトに資格情報を渡す方法…
WP にログインしているユーザーが、実際には Zend に既にログインしているユーザーと同じであることを WP に伝える、ある種の認証プロセスが必要です。この目的のために、ZF から WP への Ajax 呼び出しでユーザー名とパスワードを渡すことはできません。キャッシュされた JS ソース コードからすべてのユーザーのパスワードを取得できるからです。また、ajax 呼び出しでユーザー名だけを渡すことはできません。これは、誰もがそのような ajax 呼び出しを行って他の誰かとしてサインインできるためです。
一般に、クライアント側のリクエスト (Ajax) による承認の受け渡しをできるだけ制限する必要があります。
これを行う 1 つの方法は、OAuth と呼ばれる多くのソーシャル ネットワーク (Facebook など) で使用されるメカニズムです。Facebook は認証に特別なトークンを使用し、Facebook と Facebook 接続メカニズムを使用する Web サイトとの間で資格情報が渡されることはありません。また、Facebook は PHP の curl 関数を使用してクロス サーバー コールを背後で行うため、認証プロセスに関する痕跡がクライアント側に残されません。
使用できますが、OAuth を使用する必要はありませんが、使用すると良い経験になります。
あなたが直面しているもう 1 つの問題は、おそらく ZF と WP がクライアント側で異なる認証 Cookie を使用していることです。したがって、ZF Web サイトでユーザーを承認するときは、適切な Cookie が設定されていることを確認するために、ログインを担当する WP ページへの Ajax 呼び出しも行う必要があります。
要約すると、プロセス フローは次のようになります (ユーザー アカウントが両方のサイトで既に作成されていると仮定します)。
- ZF サイトにユーザーをログインします。
- ZF からユーザー ID (たとえば) を含む WP ページへの curl 呼び出しを行い、ランダムに生成された何らかのトークンを返します (指定された ID を持つユーザーが存在する場合)。
- curl 呼び出しが WP からトークンを受け取ったら、WP への Ajax 呼び出しを行う JS を使用して ZF Web ページを生成します (WP への Ajax 呼び出しの送信方法については、こちらで説明しています: http://codex.wordpress.org/AJAX_in_Plugins ) この Ajax 呼び出しmd5 ハッシュ化されたユーザー ID とトークンのようなものが含まれている必要があります。
- WP 側では、WP はハッシュ値を使用して ZF の Ajax 呼び出しを受け取ります。したがって、この値が以前に WP が返したユーザー ID とトークンをハッシュした後の値 (ステップ 2) と同じかどうかを確認します。はいの場合、WP サイトでユーザーをログインします。
ここで、ZF から WP にユーザー パスワードを送信しないため (暗号化されているため、WP 側でもわかりません)、wp_signon を使用してユーザーをサインインすることはできません。ただし、この特定の目的には十分な wp_set_auth_cookie を使用できます。
大雑把な説明ですが参考になれば幸いです。
PS wp_login は推奨されていないため、使用を避ける必要があります。
また、wp_login アクションは wp_set_auth_cookie を呼び出しません。これは、ユーザーが最初にログインしているように見えなかった理由である可能性があります。
wp_set_auth_cookie を使用してソリューションを試してください。上記のセキュリティ上の懸念を見逃さないように、最後にこれを言っています。