web-dev-qa-db-ja.com

私自身の認証システムを維持しながら、私のウェブサイトにWordPressを統合する

私は最近私のウェブサイトにWordPressを統合し、私は私のウェブサイト上のものとWordpressの認証システムを置き換える正しい方法を見つけようとしています。

私のウェブサイトにはすでにユーザーデータベースがあり、ユーザーはPHPセッションを通じて認証されています。

私の目標は、単にWordPressの統合された登録/ログインフォームを削除し、すでに私のWebサイトにログインしているユーザーがsession_start()(および特権チェック)を通じてWordpressの機能にアクセスできるようにすることです。私はWordpressのユーザーデータベースを使用しないでしょう。

このトピックで私が見つけた情報のほとんどは、 プラグイン外部データベース認証リロード のように、外部データベースをWordpressに統合することに関するものですが、ユーザーが許可される前にログインした場合のチェック方法を実際に変更する方法はほとんどありません。彼はアクセスします。

自分のWebサイトにログインしているユーザーが自分のWordPressにログインしている場合と同じ権限を取得する方法を正しく理解したい($_SESSION['simple_auth'] == trueかどうかをチェックすることによって)

私はこの質問がすでに尋ねられていることを理解しています。私はいくつかの研究をしました、しかし、私は主にこれをする方法(または、なぜ私はこれをしてはいけないか)についてのアドバイスと私を助けるかもしれないいくつかのガイドラインを探しています。

3
apatik

Auth0( http://www.auth0.com )を使用していますか?非常に優れたWordpressプラグインがあります。

システムを統合し、プラグインを使用してシングルサインオン(SSO)を実行できると思います。

これを使用して、システム上でいくつかの作業を行い、統合することをお勧めします(システムを知っており、おそらく生産性が向上する可能性があるため) https://auth0.com/docs/oauth-web -protocol そして、プラグインがWordpressのすべてを処理できるようにします。

1
fsenna

WordPressの認証システムは プラグイン可能な関数 で構成されています。つまり、wp_authenticate()という名前の関数を持つプラグインを作成でき、サイトではネイティブの代わりに your wp_authenticate()関数が使用されます。 WordPressの1つ。

is_user_logged_in() (元の投稿へのコメント)に対するコメントは、is_user_logged_in()がプラガブルなwp_get_current_user()を呼び出すという事実によって取り除かれています。つまり、自分でwp_get_current_user()を記述してis_user_logged_in()を制御することができます。

だからあなたは既存のユーザーデータベースを使うWordPress用の認証システムを書くことができるはずです。

参考文献

1
Pat J

これが認証プラグインの例です。それはあなたのphpセッション変数から情報を引き出します。これは使い方です:

  1. ファイルmycustom-auth.phpに保存してください。
  2. クラスの最上部付近の定数を変更する
  3. wp-content/plugins/mycustom_authまたはwp-content/mu-pluginsに入れてください。
  4. wp-adminで有効にする
  5. WPからログアウトして、もう一度ログインしてください。 WPログインフォームに、カスタムオーセンティケータに移動するための追加の行が1行表示されます。それをクリックしてからWPに戻り、ログインしているかどうかを確認してください
 
/* 
プラグイン名:mycustom Authenticator 
説明:phpセッションを使用するカスタム認証システムに対して認証します
バージョン:1.0 
 */
 
 
 new mycustom_auth(); 
 class mycustom_auth {
 const AUTH_URL = 'http://domain.com/mylogin.php '; //カスタム認証URL 
 const USERNAME = "username"; //ユーザー名のphpセッション変数
 const EMAIL = "email"; //電子メールアドレスのphpセッション変数
 const FIRSTNAME = "first"; // firstnameのphpセッション変数 - オプション
 const LASTNAME = "last"; //姓のphpセッション変数 - オプション
 
 function mycustom_auth(){
 add_filter( 'authenticate'、配列($ this、 'authenticate')、20、3); 
 add_action( 'login_form'、array($ this、 'login_form')); 
 add_action( 'login_head'、array($ this、 'login_head')); 
 [ // remove_filter( 'authenticate'、 'wp_authenticate_username_password'、20、3); 
} 
 
 function authenticate($ user、$ username、$ password){ 
 if(is_a($ user、 'WP_User')){
 return $ user; 
} 
 $ uid = $ _SESSION [mycustom_auth :: USERNAME]; 
 $ email = $ _SESSION [mycustom_auth :: EMAIL]; 
 $ firstname = $ _SESSION [mycustom_auth :: FIRSTNAME]; 
 $ lastname = $ _SESSION [mycustom_auth :: LASTNAME] ; 
 if(!isset($ _ SESSION [mycustom_auth :: USERNAME])||空($ uid)){
 return new WP_Error( 'invalid_username'、__( ' カスタムログインエラー :phpセッションが設定されていません。 ')); 
} 
 $ user = get_user_by(' login '、$ uid); //(!$ user){
 $ user = $ this-> create_user($ uid、$ email、$ firstname、$ lastname); [.____。代わりに電子メールアドレスで取得することもできます。 ](!$ user){
 return new WP_Error( 'invalid_username'、__( ' カスタムログインエラー :あなたは現在このサイトに登録されているユーザーではありません。)); [.____新しいWP_User($ user-> ID)を返す; 
} 
 
関数create_user($ username、$ email、 $ firstname、$ lastname){[(____)] if(empty($ username)|| empty($ email))nullを返す; 
 $ user_id = wp_insert_user(array( 'user_login' => $ username、 
 'user_email' => $ email、 'first_name' => $ firstname、 'last_name' => $ lastname)); 
 $ user = new WP_User($ user_id); 
 ] $ user-> set_role(mycustom_auth :: DEFAULT_ROLE); 
 return $ user; 
} 
 
 function login_form(){
 echo ' '。 __( 'カスタムログイン'、 'custom_login') ''; 
} 
 
 function login_head(){
 //ここにカスタムスタイルを設定します[
]} 
} 
 
 
?> 
0
user42826