概要
「WordPressのログイン処理にて、WordPressのユーザーアカウントではなく別の認証(APIなど)を使ってログインさせる方法」を検索してみたが見当たらなかったため、自分で実装してみた。
実装
- functions.phpでafter_setup_themeフックに処理を追加する。
- 独自の認証方法でログインに成功した後は、特定のWordPressユーザーとしてログインさせる。
以下の例の場合、ログイン成功時はuser777というWordPressユーザーとしてログインさせている。
function custom_authentication()
{
if (isset($_POST['wp-submit']) && $_POST['wp-submit'] === 'ログイン') {
// 独自の認証
if (
$_POST['log'] === 'hoge' && $_POST['pwd'] === 'hogehoge'
|| $_POST['log'] === 'hoge2' && $_POST['pwd'] === 'hogehoge2'
) {
// WordPressユーザーとしてログイン
$user = wp_signon(['user_login' => 'user777', 'user_password' => 'xxxxxxxxxxxx']);
if (!is_wp_error($user)) {
wp_safe_redirect(home_url());
exit;
}
}
}
}
add_action('after_setup_theme', 'custom_authentication');
外部APIで認証する場合
function custom_authentication()
{
if (isset($_POST['wp-submit']) && $_POST['wp-submit'] === 'ログイン') {
// 外部APIで認証
$context = array(
'http' => array(
'method' => 'POST',
'header' => 'Content-Type: application/x-www-form-urlencoded',
'content' => http_build_query(['loginId' => $_POST['log'], 'loginPassword' => $_POST['pwd']])
)
);
$res = file_get_contents('https://xxx.xx/api/login/', false, stream_context_create($context));
if ($res !== false) {
// ユーザーを固定
$user = wp_signon(['user_login' => 'usser777', 'user_password' => 'xxxxxxxxxxxx']);
if (!is_wp_error($user)) {
wp_safe_redirect(home_url());
exit;
}
}
}
}
add_action('after_setup_theme', 'custom_authentication');