[WordPress]認証処理をAPI等の独自処理にカスタマイズする方法

スポンサーリンク

概要

「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');

コメント