我正在努力让两个流行的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
函数。
我正在尝试做一个重大项目吗?如果是这样,是否有另外一组插件(或单个插件)将处理以下内容:
要求用户登录以查看任何页面(仅限会员)
要求管理员审核/批准新用户(RPR会做什么)
支持通过Facebook,Twitter和Google登录(Nextend Connect插件的功能)
更新
我将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']);
}
答案 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插件已经有代码向用户显示一条好消息,让他们知道管理员需要验证帐户。