自动登录WP用户时出现问题

时间:2016-04-20 作者:Maija Vilkina

作为将用户迁移到新系统的临时措施,我设计了一种解决方案,当用户登录旧系统时,他们会被转发到新系统,并根据用户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,尽管可以通过一些努力猜测其机制)。

1 个回复
最合适的回答,由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,快乐的舞蹈。

相关推荐

为什么我可以登录wp-login.php而不能登录wp-admin.php?

我最近更改了配置。我的FTP中Wordpress中的php文件,因为URL错误(我用define(\'WP_SITEURL\', \'http://www.myyyysite.com\'); define(\'WP_HOME\', \'http://www.myyyysite.com\');.现在我仍然无法登录www.myyyysite.com/wp-admin.php 但是www.myyyysite.com/wp-login.php 作品有什么问题吗only works 对于the wp-login.p