将WordPress集成到我的网站,同时保留我自己的身份验证系统

时间:2016-05-03 作者:apatik

我最近将WordPress集成到了我的网站上,我一直在寻找用我网站上的身份验证系统取代WordPress身份验证系统的正确方法。

我的网站已经有一个用户数据库,用户通过PHP会话进行身份验证。

我的目标只是删除WordPress的集成注册/登录表单,这样已经登录到我的网站的用户就可以通过session_start() (和权限检查)。我不会使用Wordpress的用户数据库。

我在这个主题上找到的大多数信息都是关于将外部数据库集成到Wordpress的,比如the plugin External Database Authentication Reloaded, 但很少有人知道如何真正改变WordPress在授予用户访问权限之前检查用户是否登录的方式。

我想正确理解如何允许登录我的网站的用户获得与登录我的WordPress相同的权限(通过检查$_SESSION[\'simple_auth\'] == true)

我知道这个问题已经被问过了;我已经做了一些研究,但我主要是在寻求关于如何做这件事(或者为什么我不应该做这件事)的建议,以及一些可能对我有帮助的指南。

3 个回复
SO网友:Pat J

WordPress的身份验证系统由以下部分组成pluggable functions, 这意味着你可以编写一个插件,它有一个名为,wp_authenticate(), 您的网站将使用您的wp_authenticate() 函数而不是本机WordPress函数。

您对的评论is_user_logged_in() (在你原来的帖子上)被以下事实所取代is_user_logged_in() 调用可插入wp_get_current_user(), 意思是你可以自己写wp_get_current_user() 和控制is_user_logged_in() 那样的话。

因此,您应该能够为WordPress编写一个身份验证系统,该系统将使用您预先存在的用户数据库。

参考文献is_user_logged_in()
  • Pluggable functions
  • WordPress code reference
  • SO网友:fsenna

    正在使用Auth0(http://www.auth0.com) 也许是你的选择?他们有一个很好的Wordpress插件。

    我认为您可以集成您的系统,并使用该插件进行单点登录(SSO)。

    我认为这是一个更好的选择,你可以在你的系统上做一些事情来集成(因为你知道这个系统,可能会更有效率),使用这个https://auth0.com/docs/oauth-web-protocol 让插件处理Wordpress上的所有内容。

    SO网友:user42826

    下面是一个验证插件示例。它将从php会话变量中提取信息。使用方法如下:

    将其保存到文件mycustom auth中。php修改类顶部附近的常量,将其放入wp-content/plugins/mycustom\\u auth或wp-content/mu-plugins中,在wp-admin中启用它,注销wp,然后再次登录。您应该在WP登录表单中看到一个额外的行,以将您带到自定义验证器。单击它,然后返回WP查看您是否已登录

    
    /*
       Plugin Name: mycustom Authenticator
       Description: authenticates against custom authenticator which uses php sessions
       Version: 1.0
     */
    
    
    new mycustom_auth();
    class mycustom_auth{
        const AUTH_URL = \'http://domain.com/mylogin.php\'; // custom auth url
        const USERNAME = "username"; // php session variable for username
        const EMAIL = "email"; // php session variable for email addreess
        const FIRSTNAME = "first"; // php session variable for firstname - optional
        const LASTNAME = "last"; // php session variable for lastname - optional
    
        function mycustom_auth() {
            add_filter(\'authenticate\', array($this,\'authenticate\'), 20, 3);
            add_action(\'login_form\', array($this,\'login_form\'));
            add_action(\'login_head\', array($this,\'login_head\'));
    
            //remove_filter(\'authenticate\', \'wp_authenticate_username_password\', 20, 3);
        }
    
        function authenticate($user, $username, $password) {
            if ( is_a($user, \'WP_User\') ) {
                return $user;
            }
            $uid = $_SESSION[mycustom_auth::USERNAME];
            $email = $_SESSION[mycustom_auth::EMAIL];
            $firstname = $_SESSION[mycustom_auth::FIRSTNAME];
            $lastname = $_SESSION[mycustom_auth::LASTNAME];
            if (!isset($_SESSION[mycustom_auth::USERNAME]) || empty($uid)) {
                return new WP_Error(\'invalid_username\', __(\'Custom Login Error: php session not set.\'));
            }
            $user = get_user_by( \'login\', $uid); // could get by email address instead
            if (!$user) {
                $user = $this->create_user($uid,$email,$firstname,$lastname);
                if (!$user) {
                    return new WP_Error(\'invalid_username\', __(\'Custom Login Error: You are not currently registered user for this site.\'));
                }
            }
            return new WP_User($user->ID);
        }
    
        function create_user($username,$email,$firstname,$lastname) {
            if ( empty($username) || empty($email)) return null;
            $user_id = wp_insert_user(array(\'user_login\'=>$username,
                        \'user_email\'=>$email,\'first_name\'=>$firstname,\'last_name\'=>$lastname));
            $user = new WP_User($user_id);
            $user->set_role(mycustom_auth::DEFAULT_ROLE);
            return $user;
        }
    
        function login_form () {
            echo \'\' . __(\'Login with Custom\', \'custom_login\') . \'

    \'; } function login_head() { // put custom styling here } } ?>