私はログインユーザーとして自動受け入れテストのいくつかを実行しようとしています。私の受け入れテストは基本的な認証ヘッダを送ることができるGhost Inspectorを使って実行されます。
REST API用の基本的な認証プラグインがあるので、誰かがより良い解決策でこれに答えるのでなければ、私はどんな要求でも動作するようにそれをハッキングしています。
はい、基本認証はそれほど安全ではありませんが、HTTPSを使用する場合はwp-login - IEと同じくらい安全です。また、これはテストサイトであり、セキュリティを心配する必要はありません。
determine_current_user
フィルターにフックしてHTTP基本認証データを調べてユーザーを返すだけです。
たぶん、おそらく、私は特定のユーザーだけがHTTP認証を介してログインすることを許可するでしょう。
これは、たとえばユーザーオプションを設定することによって実行できます。
コードは次のようになります(OPでテスト済み)。
add_filter( 'determine_current_user', function( $cur_user ) {
// If user already logged in or no HTTP AUTH info, return
if ($cur_user || empty($_SERVER['PHP_AUTH_USER']) || empty($_SERVER['PHP_AUTH_PW'])) {
return $cur_user;
}
// If there's no user with given username, return
$found_user = get_user_by('login', $_SERVER['PHP_AUTH_USER']);
if (!$found_user) {
return $cur_user;
}
// If password does not match, return
if ( ! wp_check_password( $_SERVER['PHP_AUTH_PW'], $found_user->user_pass ) ) {
return $cur_user;
}
// Return found user ID only if allowed to login via HTTP in user meta
return get_user_option( 'http_auth_login_allowed', $found_user->ID )
? $found_user->ID
: $cur_user;
}, 30);
WPはCookieからユーザーをログに記録するために20(IIRC)を使用するので優先順位30を使用しました。
たとえ正直に言っても本番サイトでこれを実行しない場合でも、セキュリティを向上させるためにis_ssl()
を要求するためのチェックを追加することができます。しかし、OPがtargetはテストサイトであると言っていることを考えると…これで問題ありません。