使Register Plus Redux与Nextend Google Connect配合使用

时间:2013-09-24 04:32:55

标签: facebook wordpress plugins oauth-2.0

我正在努力让两个流行的WordPress插件很好地协同工作。希望这个问题对我的设置不太具体 - 我认为有足够的人使用这些插件使其成为常见问题。

我正在使用Register Plus Redex(RPR)要求在用户登录之前(由管理员)接受用户注册。一个人,这很好。

我还使用Nextend Google Connect(NGC)来允许用户使用Google登录。这些也需要在他们登录之前获得批准。

当NGC在数据库中创建新用户时,它正确设置了“未激活”标志。但是,用户仍然登录。这使他们可以看到一些受“仅限会员”(另一个插件)保护的博客页面。我可以更新会员或其他区域以避免这种情况,但我希望这些用户看到普通用户会看到的相同行为,一个只用用户/密码登录,而不是谷歌。他们得到了一个很好的“您的帐户尚未激活”消息。

RPR有这个代码进行身份验证,我想我需要以某种方式从NGC中使用它:

    public /*.object.*/ function rpr_authenticate( /*.object.*/ $user, /*.string.*/ $username, /*.string.*/ $password) {
        if ( !empty($user) && !is_wp_error( $user ) ) {
            if ( NULL !== get_role( 'rpr_unverified' ) && in_array( 'rpr_unverified', $user->roles ) ) {
                return null;
            }
        }
        return $user;
    }

我认为这是我需要修改的NGC代码部分:

    $secure_cookie = is_ssl();
    $secure_cookie = apply_filters('secure_signon_cookie', $secure_cookie, array());
    global $auth_secure_cookie; // XXX ugly hack to pass this to wp_authenticate_cookie

    $auth_secure_cookie = $secure_cookie;
    wp_set_auth_cookie($ID, true, $secure_cookie);
    $user_info = get_userdata($ID);
    do_action('wp_login', $user_info->user_login, $user_info);
    do_action('nextend_google_user_logged_in', $ID, $u, $oauth2);
    update_user_meta($ID, 'google_profile_picture', 'https://profiles.google.com/s2/photos/profile/' . $u['id']);

NGC代码使用了我认为是“被黑客入侵”的登录方法。它不使用我在网上推荐的任何方法,例如新的wp_signon或更早的wp_login函数。

我正在尝试做一个重大项目吗?如果是这样,是否有另外一组插件(或单个插件)将处理以下内容:

  1. 要求用户登录以查看任何页面(仅限会员)

  2. 要求管理员审核/批准新用户(RPR会做什么)

  3. 支持通过Facebook,Twitter和Google登录(Nextend Connect插件的功能)

  4. 更新

    我将NGC代码更改为此,现在它不会记录用户,但它只是将它们保留在登录页面上,没有错误消息。我不确定如何将错误消息添加到默认登录页面,我在网上找到的所有内容都与自定义登录页面相关。

          if ($ID) { // Login
    
            $user_info = get_userdata($ID);
                if ( !empty($user_info) && !is_wp_error( $user_info ) ) {
                    if ( NULL !== get_role( 'rpr_unverified' ) && in_array( 'rpr_unverified', $user_info->roles ) ) {
    // TODO - How to add error message to log-in page?
                        return;
                    }
                }
    
            $secure_cookie = is_ssl();
            $secure_cookie = apply_filters('secure_signon_cookie', $secure_cookie, array());
            global $auth_secure_cookie; // XXX ugly hack to pass this to wp_authenticate_cookie
    
            $auth_secure_cookie = $secure_cookie;
            wp_set_auth_cookie($ID, true, $secure_cookie);
    //
            do_action('wp_login', $user_info->user_login, $user_info);
            do_action('nextend_google_user_logged_in', $ID, $u, $oauth2);
            update_user_meta($ID, 'google_profile_picture', 'https://profiles.google.com/s2/photos/profile/' . $u['id']);
          }
    

1 个答案:

答案 0 :(得分:0)

我确信有更好的方法可以做到这一点,我不会在任何时候更新插件时撤消,但现在这对我有用。

我更新了nextend-google-connect.php,这是Nextend Google Connect插件的一部分,并将登录代码(从第230行开始,具体取决于您的版本)更改为:

  if ($ID) { // Login

    $user_info = get_userdata($ID);
        if ( !empty($user_info) && !is_wp_error( $user_info ) ) {
            if ( NULL !== get_role( 'rpr_unverified' ) && in_array( 'rpr_unverified', $user_info->roles ) ) {
                wp_redirect('wp-login.php?checkemail=registered');
                exit;
            }
        }

    $secure_cookie = is_ssl();
    $secure_cookie = apply_filters('secure_signon_cookie', $secure_cookie, array());
    global $auth_secure_cookie; // XXX ugly hack to pass this to wp_authenticate_cookie

    $auth_secure_cookie = $secure_cookie;
    wp_set_auth_cookie($ID, true, $secure_cookie);

    do_action('wp_login', $user_info->user_login, $user_info);
    do_action('nextend_google_user_logged_in', $ID, $u, $oauth2);
    update_user_meta($ID, 'google_profile_picture', 'https://profiles.google.com/s2/photos/profile/' . $u['id']);
  }

通过重定向到该特殊URL,Redux插件已经有代码向用户显示一条好消息,让他们知道管理员需要验证帐户。