web-dev-qa-db-ja.com

ユーザーが認証される前にフックがありますか?

WPがユーザーのログイン認証情報を認証するためにDBを読み取る前に使用できるフックを探していますが、どこにも見つからないようです。存在しますか?

私はadd_filter/action('authenticate', 'customcode', 30, 3)を試しましたが、これはwp-login.phpページが要求されるとすぐに実行されるようです。ユーザーがログインにヒットし、ユーザー名/パスワードがPOSTになった後ではありません。

2
Ken

wp-login.phploginの場合とデフォルトの場合の両方 のコードを見ると、 wp_signon() を実行します。その理由は、私にはそう思われるように、ユーザーがすでにそのサイトに対して有効なCookieを持っているケースを管理するためです。だから私はログイン時にのみ起動するフックがあるとは思わないが、それを補うことはかなり簡単です。そのログインパスに沿って認証前の最初のフックはauthenticateではなくactionフックwp_authenticateです(それは有効なフックです)。

function customcode($username, $password ) {
  if (!empty($username) && !empty($password)) {
    // your code
  }
}
add_action('wp_authenticate', 'customcode', 30, 2);
2
s_ha_dum

ああ、add_filter/action('authenticate', 'customcode', 30, 3)が私が探していたものだったことがわかります...

問題は、優先順位が低すぎるため、カスタムコードを使用して作成したレスポンスが他のフィルタによって上書きされたことです。

だからglobal $wp_filter['authenticate']をダンプする私は次のフィルタを見ることができます:

20, wp_authenticate_username_password
30, wp_authenticate_cookie
99, wp_authenticate_spam_check

優先度を100(またはそれ以上)に変更することで、代わりに上書きを行い、ログインページで送信されたログイン認証情報を処理するために必要な応答を作成できます。

1
Ken