这个问题Set up WP Authentication from External API 有到博客的链接。这让我走上了正确的方向,并为我的工作带来了一些启示(感谢@Rup)。
class CustomLogin
{
/**
* Initializes the plugin.
*
* To keep the initialization fast, only add filter and action hooks in the constructor.
*/
public function __construct()
{
add_filter(\'authenticate\', array($this, \'my_custom_authentication\'), 10, 3);
remove_action(\'authenticate\', array($this, \'wp_authenticate_username_password\'), 20);
remove_action(\'authenticate\', array($this, \'wp_authenticate_email_password\'), 20);
add_action(\'authenticate\', array($this, \'new_wp_authenticate_email_password\'), 20, 3);
}
public function my_custom_authentication($user, $userName, $password)
{
$authenticationResponse = $this->custom_authentication($userName, $password);
if (isset($authResponse[\'Auth_Error\']) && !empty($authResponse[\'Auth_Error\']))
return 0;
$user = get_user_by(\'email\', $authenticationResponse[\'Auth_Email\']);
if (!empty($user))
return $user;
else
return 0;
// Add WP_Error message where ever is convinient for you
}
public function new_wp_authenticate_email_password($user, $userName, $password)
{
if ($user instanceof WP_User) {
return $user;
}
// Validations and WP_Error message
}
}
我使用了一个插件,上面的代码首先验证外部服务上的用户。如果在外部服务上找到该用户,然后在WordPress上返回该用户登录的用户,如果没有,则返回错误消息。
您在构造函数中看到的数字是优先级,它决定了操作或筛选器将被触发的时刻。
add_filter(\'authenticate\', array($this, \'my_custom_authentication\'), 10, 3);
如果您想了解更多关于这些优先事项的数字,请阅读以下内容:
https://usersinsights.com/wordpress-user-login-hooks/谢谢:)