SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

【WordPress】wp_usersテーブルを流用してログイン機能を作る

問題

WordPressのデータベースに、ユーザーのアカウント情報が入っているテーブル(wp_users)があるけど、これを外部のシステムでも流用させてもらって、認証機能を作りたい。

よく分からない文字列が入っているのですが、どうやってパスワードと照合したらよい?

答え

wp_usersのuser_passには、ただのMD5ではなさそうなデータが入っている。

wp_users

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 ではないことがあるので、環境に応じて調整。

参考

http://www.openwall.com/phpass/

関連するメモ

コメント