【WordPress】wp_usersテーブルを流用してログイン機能を作る
問題
WordPressのデータベースに、ユーザーのアカウント情報が入っているテーブル(wp_users)があるけど、これを外部のシステムでも流用させてもらって、認証機能を作りたい。
よく分からない文字列が入っているのですが、どうやってパスワードと照合したらよい?
答え
wp_usersのuser_passには、ただのMD5ではなさそうなデータが入っている。
WordPressはパスワードのハッシュの生成、照合に、phpass というライブラリを使っている。
ファイルがひとつ、PasswordHashというクラスがひとつ、200行ほどのプログラム。
ファイルは、WordPressのソースでは、wp-includes/class-phpass.php にある。
WordPressと同じことをすれば、wp_userを流用した認証機能が作れる。
パスワードの照合をしたいとき
require 'wp-includes/class-phpass.php'; //もしくは別途保存したPasswordHashへのパス //引数はWordPressのまね $x = new PasswordHash(8, true); //照合 $result = $x->CheckPassword('test123456', '$P$B9GhlwPyyhBlU6WrnmxyNcJAhOxJYE1'); // → true $result = $x->CheckPassword('1234567890', '$P$B9GhlwPyyhBlU6WrnmxyNcJAhOxJYE1'); // → false
もうちょっとそれっぽく書くと、
require 'wp-includes/class-phpass.php'; //もしくは別途保存したPasswordHashへのパス //引数はWordPressのまね $x = new PasswordHash(8, true); //ここで入力されたアカウント名でwp_usersを検索 $query = "select * from wp_users where user_login = 'アカウント'"; //...MySQLから取ってきて... $hash = '抽出したもの'; //入力されたパスワードは?($_REQUEST['pwd'] など) $password = '入力されたもの'; //照合 $result = $x->CheckPassword($password, $hash);
ハッシュを生成したいときは
require 'wp-includes/class-phpass.php'; //もしくは別途保存したPasswordHashへのパス //引数はWordPressのまね $x = new PasswordHash(8, true); //ハッシュ生成 $hash = $x->HashPassword('test123456'); // → $P$B9GhlwPyyhBlU6WrnmxyNcJAhOxJYE1
備考
テーブル名は、設定によっては接頭辞が’wp_’ではない → wp_users ではないことがあるので、環境に応じて調整。
コメント