更好的方法是在URL中包含user\\u id(甚至可能不是纯文本$code = get_user_meta( $user_id, \'activation_account_token\', true ); 和从用户处检查令牌是相同的-超出此问题的范围)。
错误的原因是此行echo $user_id;
wp_clear_auth_cookie();
wp_set_current_user ( $user->ID );
wp_set_auth_cookie ( $user->ID );
wp_redirect( home_url() );
You shouldn\'t output anything before the redirect takes place.
已更新
您可以选择如何处理重定向:
在主题模板内,将重定向代码移到get_header();
作用php/插件
更好的选择是使用wp_loaded 在输出任何HTML之前触发。
add_action (\'wp_loaded\', \'login_redirect\');
function login_redirect() {
if ( isset( $_GET[\'key\'] ) ) {
$user = get_users(array(
\'meta_key\' => \'key_or_the_name_you_use\',
\'meta_value\' => $_GET[\'key\'] ,
\'number\' => 1,
));
if(count($user) == 1){
$user_id =$user[0]->ID;
wp_clear_auth_cookie();
wp_set_current_user ( $user_id );
wp_set_auth_cookie ( $user_id );
wp_redirect( home_url() );
exit;
}
}
}
这是你实际上可以做的,但我认为你误解了我的答案,因为包括用户id可以提高安全性,而不是降低安全性。
包括user\\u id可以将用户id与令牌绑定,因此有人强制URL使其登录,还必须将随机字符串与用户id帐户匹配(这实际上是行业所做的)-当然还有更多的安全检查。
Javascript
echo "<script>location.href=\'get_home_url()\'</script>";
这可以在wp\\U重定向位置输出,以使浏览器进行重定向。
但由于这是浏览器重定向,用户可能阻止了Javascript或重定向的执行。