WordPressのユーザーを流用したログインページ

男の娘にはどうやら何かしらの共通点があるらしい…

自分もなにかこういう面白い題材でディープラーニングしたいですね

ちょっと変わったないようですがWordPressのユーザー・パスを使ったログインページの実装をしました。

前提

実装したページはワードプレスのディレクトリの外なので一部WordPressのコアphpをrequireしてます。ディレクトリ内なら少し書き換える必要があるかも

実装

class-phpassを読み込みCheckPassword()で判定してます

<?php
require_once 'function.php';
require_unlogined_session();

require_once 'wp-load.php';
require_once 'class-phpass.php';
//引数はWordPressのまね
$x = new PasswordHash(8, true);
// 事前に生成したユーザごとのパスワードハッシュの配列
$hashes = array();
$data = $wpdb->get_results( "SELECT * FROM $wpdb->users" );
foreach ($data as $value) {
	$hashes[$value->user_login] = $value->user_pass;
}

// ユーザから受け取ったユーザ名とパスワード
$username = filter_input( INPUT_POST, 'username' );
$password = filter_input( INPUT_POST, 'password' );

// POSTメソッドのときのみ実行
if ( $_SERVER[ 'REQUEST_METHOD' ] === 'POST' ) {
	if( $x->CheckPassword($password, $hashes[$username]) ){
        // 認証が成功したとき
        // セッションIDの追跡を防ぐ
        session_regenerate_id( true );
        // ユーザ名をセット
        $_SESSION[ 'username' ] = $username;
        // ログイン完了後に / に遷移
        header( 'Location: /001' );
        exit;
    }
    // 認証が失敗したとき
    // 「403 Forbidden」
    http_response_code( 403 );
}
header( 'Content-Type: text/html; charset=UTF-8' );
?>

<!---ログインページ--->
<input type="text" name="username" value="">
<input type="password" name="password" value="">
<input type="hidden" name="token" value="<?=h(generate_token())?>">
<?php if (http_response_code() === 403): ?>
<p style="color: red;">ユーザ名またはパスワードが違います</p>
<?php endif; ?>
<input class="log-btn" type="submit" value="ログイン">