web-dev-qa-db-ja.com

ワードプレスによる外部システム統合

私はweb/dbアプリケーションを書いています。私のクライアントは、ユーザーがWordPressにログインしているかどうかに基づいて認証を希望します。

このアプリケーションが/wordpress内からホストされていると仮定すると、私は以下のことができることを望みます。

  1. だれであれば、誰がWordPressにログインしているかを判断します。

    それはwp_get_current_user()によって可能であるべきであるかのように思えますが、私はそのインクルードファイルがその仕事をするために含まれる必要があるかを詳述するどんなドキュメンテーションも見つけることができません。 /wp-includes/plugin.phppluggable.phpを含めると、wp_get_current_user()からclass WP_User not foundエラーが発生します。必要なインクルードファイルが含まれていないと思いますが、どちらが必要ですか?

  2. WordPressのクッキーを読む

    作成時に使用されたハッシュに関する知識を必要としているようです - これはどのように取得可能ですか?

追加情報:クライアントは、300人以上のアーティストが集まります。

  • wordPressで管理されているWebサイト
  • 展覧会への応募を管理するシステム
  • メンバーデータベース
  • ロタ、
  • ユーザロール
  • カタログ制作
  • 詳細なビジネスルール/検証、権限など

それはさまざまなm:nの関係になります。そのため、一般向けWebサイトでWordPressと並んで「クラブ管理者」を提供する別のシステムが、不確かな未来を持つ無限のプラグインを備えたWordPressよりも適しているように見えました。当然のことながら、グループはSSOを望んでいます。 OAuthなどは単一の共有ホスティング(cPanel)アカウントに制限されているため、オプションではありません。

UPDATE - 簡単な解決策が見つかりました - 下の私の答えを見てください

1
Gareth

溶液:

アプリケーションがwordpressのルート内(たとえば/ var/www/html/wordpress)からホストされている場合、そのスクリプトはwordpressルートパス内のスクリプトによる読み取りに制限されたcookieを読み取ることができます。

siteurlはワードプレス変数で、ハードコードしたくない場合はwp_optionsテーブルから動的に取得できます。

Wordpressは、現在ログインしているユーザー名を、ワードプレスのユーザー名とパスワードのハッシュとともに、wordpress_logged_in_<md5HashOfSiteURL>というCookieに格納します。以下のコードに示すように、これは文字列操作によって分割/取得できます。

この情報を提供してくれた@PeterTomasScottに感謝: https://softwareengineering.stackexchange.com/questions/312861/why-do-some-web-apps-append-random-strings-to-cookie -names

これ(PHP)は望み通りに動くようです:

$hash=md5("http://localhost/wordpress"); // or get dynamically from db $wpcookie=$_COOKIE["wordpress_logged_in_$hash"]; $stop=strpos($wpcookie,"|"); $currentusername=substr($wpcookie,0,$stop);

最初の "|"に続く$wpcookieの内容現在のユーザーのユーザー名とパスワード(wp_usersから)のハッシュで、これはさらなるセキュリティチェックに使用できます。

私はApacheが未定義のWPxxx定数について文句を言っていたので(ワード関数は機能しないでしょう、そしてインクルードファイルのチェーンのさらに上のいくつかのインクルードファイルは文句を言わないでしょう)。私のインストールに何か問題があるといいのですが、そうでなければ簡単なことを達成するには非常に多くの手間がかかります。

それにもかかわらず、あなたの助けをくれた@kaiserに感謝します。

0
Gareth

wp_parse_auth_cookie() の機能を見てください。すべてのCookie定数が利用可能であるという事実を考えると、これを簡単に複製することができます。

それでも、私はそれに対して強くお勧めします。あなたのケースでは、認証メカニズムの重複を避けるためにできる限りWordPressと統合しようと思います。プラグインを使用することで、いつでも任意のカスタムコードを使用できます(そして外部データベースに接続できます)。カスタムアプリケーションのブートストラッププロセスにプラグインヘッダーのコメントを追加するだけで、すぐに実行できます。また、カスタム管理ページにデータを簡単に表示したり、一般向けサイトにページテンプレートを追加して、そこからのデータ入力を処理することもできます。それ以外の場合は、is_user_logged_in()またはexit( wp_redirect( home_url() ) );を使用してアプリケーションへのアクセスを制限します。

別のオプションは、カスタムアプリケーションを構築し、 REST API (利用可能なルート+ addtを介してWordPressと統合することです)。 docs )単純なデータプロバイダバックエンドとしてWPを使うのはそれほど難しいことではありません。

0
kaiser