作为将用户迁移到新系统的临时措施,我设计了一种解决方案,当用户登录旧系统时,他们会被转发到新系统,并根据用户id自动登录到新帐户。
旧系统上的代码如下所示:
function client_redirect_select_users($user_login, $user) {
$user_id = $user->ID;
$redirect_user = get_user_meta($user_id, \'client_redirect_user\', true);
if (intval($redirect_user) == 1) :
$redirect_user_id = get_user_meta($user_id, \'client_redirect_user_id\', true);
/* Construct fancy string to obscure user id */
wp_redirect(\'http://sillysite.com/?user_redirect=\'.$redirect_user_string);
exit();
endif;
}
add_action(\'wp_login\', \'client_redirect_select_users\', 10, 2);
新系统上的代码如下所示:
function client_auto_login() {
if (!is_user_logged_in()) :
if (isset($_GET[\'user_redirect\'])) :
$user_login_string = intval($_GET[\'user_redirect\']);
/* Do some fancy stuff to extract user id from the GET string */
$user_data = get_userdata($decrypted_user_id);
if ($user_data) :
$user_login = $user_data->user_login;
wp_set_current_user($user_id, $user_login);
wp_set_auth_cookie($user_id, true);
do_action(\'wp_login\', $user_login);
endif;
endif;
endif;
}
add_action(\'init\', \'client_auto_login\');
用户已正确登录并可以查看其数据。但当他们点击页面上的任何链接时,他们会再次注销。为什么?(有更好的方法吗?我也可以从旧系统发送用户密码(使用一些普通的ofc加密)并改用wp\\u signon(),但我不想这样做。
帮助
(我110%意识到这根本不是一个安全的解决方案,但这是几周内的一项临时措施,因为我们要让新系统整体启动并运行,而用户根本就不懂技术,所以我们正试图让他们尽可能轻松地使用它。如何通过查看用户登录字符串甚至提供随机用户id,尽管可以通过一些努力猜测其机制)。
最合适的回答,由SO网友:Maija Vilkina 整理而成
最终,wp\\u signon()是解决方案,因为cookie显然不是用我正在使用的代码设置的。我遵循了这个解决方案https://gist.github.com/iandunn/8162246以避免对密码的需要,并将这些函数添加到函数中。php。
我还将autologin代码从“init”移到了模板中,在发送任何标头或输出任何html之前(wp\\u head()上方)它会在模板中执行。
现在看起来是这样的:
if (!is_user_logged_in()) :
if (isset($_GET[\'user_redirect\'])) :
$user_login_string = intval($_GET[\'user_redirect\']);
/* Fancy user id retrieval stuff */
$user_data = get_userdata($decrypted_user_id);
if ($user_data) :
$user_login = $user_data->user_login;
$loggedin = programmatic_login( $user_login ); // <--- Gist function
if ($loggedin) :
wp_redirect(\'/userpage\');
exit();
endif;
endif;
else :
wp_redirect(wp_login_url());
exit;
endif;
endif;
这很有效,wie,yay,快乐的舞蹈。