WordPress自定义身份验证实现

时间:2020-01-03 作者:SMilenaG

我创建了一个插件,允许我的网站拥有自己的登录功能。

我的项目有一个新的要求,那就是使用我自己的身份验证方法登录到用户,而不是WP提供的方法。

我需要使用哪些操作和筛选器才能创建自己的身份验证方法?一旦我的身份验证方法成功,我如何才能将用户登录到WP站点?我不想使用插件。

有人会给我一些启示,或者给我指一个指南,告诉我如何实现它。

目前我只知道我自己的身份验证方法应该在以下位置实现:

add_action(\'wp_authenticate_user\', \'custom_authentication\', 10, 2);

1 个回复
SO网友:SMilenaG

这个问题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/

谢谢:)

相关推荐

Authentication/API Questions

我们正在尝试使用S2Member来管理我们的WP站点和我们正在启动的Flash程序的成员资格。我们希望在用户登录并保持登录状态时使用S2Member对其进行身份验证。问题:Java层需要知道哪个用户登录到Wordpress(如果有的话),以便它可以将正确的数据返回到flash层。建议的解决方案:Wordpress的cookie也应该包含在Flash到Java的请求中。Java可以使用这些cookie来查询Wordpress DB以获取用户ID。我们需要知道的是:1。是否可以从数据库或文件系统获取带有coo