Wordpress wp_set_auth_cookie()可防止重复用户

时间:2014-08-16 17:18:35

标签: php wordpress

我目前正在使用以下代码在Wordpress中使用wp_set_auth_cookie()函数登录用户:

    function auto_login() {
        $username = $_POST['user'];
        if ( !is_user_logged_in() ) {
            $user = get_userdatabylogin( $username );
            $user_id = $user->ID;
            wp_set_current_user( $user_id, $user_login );
            wp_set_auth_cookie( $user_id );
            do_action( 'wp_login', $user_login );
        }     
        die();
    }
    add_action('wp_ajax_auto_login', 'auto_login');
    add_action('wp_ajax_nopriv_auto_login', 'auto_login');

我遇到的问题与此线程相同:

Authenticating users in WordPress using wp_set_auth_cookie

但由于这个问题没有得到完全回答,我的情况如下:

  1. 用户1使用用户名1

  2. 登录PC 1
  3. 用户2使用用户名2登录到PC 2

  4. 用户名1显示为已登录

  5. 所以我的问题是,如何使用wp_set_auth_cookie()函数登录用户,同时还阻止为我的所有用户显示相同的用户名?

    更新:我的所有用户现在都以用户1的身份自动登录

    由于

1 个答案:

答案 0 :(得分:2)

您正在使用一些已弃用的函数,但未正确传递username - 未设置变量$user_login,您想使用$user->user_login。另外get_userdatabylogin()已被弃用,转而使用get_user_by()

尝试使用以下内容,请注意,这不会验证密码。有关详细信息,请参阅wp_set_current_user()的文档。

function auto_login() {
    // make sure user is not logged in and "user" was POST'd
    $username = isset( $_POST['user'] )? $_POST['user'] : false;
    if ( ! is_user_logged_in() && $username ){
        // load the user by username
        $user = get_user_by( 'login', $username ); 
        if ( $user ) {
            // log user in using the $user object properties
            wp_set_current_user( $user->ID, $user->user_login );
            wp_set_auth_cookie( $user->ID );
            do_action( 'wp_login', $user->user_login );
        }
    }
}