私はクライアントのためのプロトタイプの作業を始めようとしています - そして必要な機能の1つは社内のユーザー認証/登録システムとの統合です。
このシステムは信頼できるユーザーデータベースとして機能し、新しいユーザーを作成し、有効なユーザーを認証するためのRESTfulインターフェイスを提供します。
WPに新しいユーザーを作成し、そのプロセスの一部として外部認証APIを呼び出して、そのユーザーを作成または検証する必要があります。
有効なユーザーであるがWPを知られていない人は、WPサイトに自分で登録する必要なしに、コメントにログインすることができるはずです。
Webサイト全体にログインした人も自動的にWordPressにログインするはずです。
私は次のような方法があると考えています。
(1) - 使用できる登録フックはありますか?
(2) - 私は認証フィルタをフックすると仮定しています - つまり、誰かがログインしようとしたとき、それをトラップし、外部システムへの呼び出しを行い、そしてWP loginを処理するかリダイレクトします(1)を採用する登録プロセスへ。
(3)の場合 - メインサイトが設定したログインクッキーを読み、(2)に進みますか。
私はusersとusermetaテーブルにレコードを挿入する必要もあると思います。
だから、上記は理にかなっている - 私は何かについて考えていないか。誰もがこれを手助けするための良いリソースを手に入れました(@hakre - 私はあなたがこれについていくつかの仕事をしたのを見ました!!)。
それで私はまだこれに少し頭をぶつけています、本質的に私は認証フィルタにフックしようとしていて、それを使うためにそれを使っています:
wp_signon()
でWPログインを強制します。 WPの認証情報としてのクッキー(Eメールとハッシュされたパスワード)基本的に、私はWPログインフォームを、主にコメントしたいユーザーのために完全に隠し、後で作者と管理者がそれに直接アクセスできるようにする方法を見つけたいと思います。
それはかなりゆっくり進行しています、ここで私はいくつかの助けを借りて使うことができるものです:
認証フィルターは正しい使用フィルターですか?それは私が期待するすべての状況で呼び出されるようには思えません - 例えばmetaウィジェットは認証フックの起動なしでログイン/ログアウトリンクを表示します
wp_signon()
にWP_User
オブジェクト(成功を示す)を返させることはできますが、ログイン状態には影響しません。つまり、更新後もメタウィジェットは「Login」で表示されたままになります。
どんな助けでもありがたく受けました:)
さて、私のために働いているアプローチは以下の通りです:
メインサイトのユーザーデータベースに権限があるとします。メインサイトのログインCookieには、IDとサイトパスワードのハッシュが含まれています。
メインサイトからクッキーを取得し、メインサイトの認証APIに対してそれを再検証します
有効な場合、戻り値からの電子メールアドレスをWPの'user_login'
値として使用し、ハッシュされたサイトパスワードをWPパスワードとして使用します。
wp_authenticate('user_login', 'user_pass')
を使用して、このユーザーがWPに存在するかどうかをテストします。成功した場合はWP_User
オブジェクト、失敗した場合はWP_Error
オブジェクトを返します。
WP_Error/is_wp_error()
の場合は、use wp_update_user()
を使用してユーザーを作成します(またはパスワードを変更してユーザーを更新します)。
wp_set_current_user()
、wp_set_auth_cookie()
およびdo_action('wp_login, id)
を介してログイン
(これはすべて'init'
アクションに付随する関数に含まれています)
これはうまくいっているようです - WPがわからない有効なサイトユーザーが自動的に作成されます。パスワードの変更は考慮され、サイトクッキーが設定されていて、WPユーザーが存在する場合、SSOは自動的に行われ、非常にシームレスです。
認証システム全体がプラグ可能です。既存のプラグインを調べてシステムをオーバーライドする方法を理解することをお勧めします。おそらく、いくつかの LDAPプラグインを見ることで ?
WordPressでシングルサインオンを有効にするには18時間以上かかりましたが、数分しかかかりませんでした:
基本的には、 https://wordpress.org/plugins/wp-force-login/ と https://as.wordpress.org/plugins/jwt-authenticatorの修正版を使用することをお勧めします。/ それからJWT(JSON Web Token)を生成し、あなたのWordPressサイトの特別なURLにリダイレクトするあなたのメインサイト上の認証保護されたエンドポイントを作成します。
こちらの full codeを参照してください 。
いくつかのユーザ関連関数はwp-includes/pluggable.php
内の!function_exists()
で条件付きで定義されており、あなた自身のバージョンで上書きするのは簡単です。