私はこのようなことをしてみました:
$user = $wpdb->get_row('
SELECT *
FROM ' . $wpdb->users . '
WHERE user_pass = "' . wp_hash_password('password') . '"'
);
しかし、wp_hash_password
関数はデータベースのものとは異なる文字列を生成しますが、可能ですか
私がやりたいのは私のテンプレートにパスワードを要求するだけのカスタムフォームを用意することです(ユーザー名なしのWP admin領域へのusername/pwd画面のように考えてください)。ユーザーが入力したものは何でもハッシュし、それを私のDBと比較し、それが一致すればそのユーザーを取り出してログインします。
他の誰かが同様の機能を必要とする場合に備えて、これが私がした結果です。
// Simple text password
$client_password = $_POST['client_pwd'];
$users = get_users();
// Iterate over all users and see if the password matches
foreach ($users as $user) {
// If it matches log the user in
if (wp_check_password($client_password, $user->user_pass)) {
$user = wp_signon(
array(
'user_login' => $user->user_login,
'user_password' => $client_password
)
);
if (!is_wp_error($user)) {
// Redirect or do something else
}
}
}
worst password
の統計によると、password
は最も使用頻度の高いパスワードです。
一部のユーザーもそのパスワードを使用していると確信しています。
そのため、複数の行に同じハッシュが含まれます。それ故それは不可能である。
ところで、これは奇妙な質問です。
コメントごとに、私は言い換えた質問に答えるつもりです - 「ほとんどの場合パスワードフィールドだけを示すログインフォームを作る方法」。
答えは、ユーザーがログインするたびに、ユーザー名を非常に長期のCookie(1年?)に保存することです。
function wpse82578_set_user_cookie($logged_in_cookie, $expire, $expiration, $user_id, $state) {
if ($state == 'logged_in') { // user has logged in - store his name in a 'username' cookie
$user = get_user_by( 'id', $user_id );
setcookie('username', $user->user_login, time() + 365*24*60*60, COOKIEPATH, COOKIE_DOMAIN);
}
}
add_action('set_logged_in_cookie', 10,5);
これであなたはPHPコードでクッキーが設定されているかどうかをチェックしてあなたのフォームのユーザー名フィールドを表示または非表示にすることができます。
function wpse82578_echo_login_form() {
...
if (isset($_COOKIE['username'])) { // already know the user name, no point in asking for it again so just put it as hidden field
<input type="hidden" name="log" value="<?php esc_attr($_COOKIE['username'])?> />
else { // show the field+label, ripped from wp_login_form
<p class="login-username">
<label for="' . esc_attr( $args['id_username'] ) . '">' . esc_html( $args['label_username'] ) . '</label>
<input type="text" name="log" id="' . esc_attr( $args['id_username'] ) . '" class="input" value="' . esc_attr( $args['value_username'] ) . '" size="20" tabindex="10" />
</p>
}
}
このコードに対する保証はありませんが、セキュリティを犠牲にしたり、WordPressユーザーシステムに迷惑をかけたりすることなく、あなたが望むものに最も近いと思います。