关于php:WordPress的wp_set_auth_cookie()防止重复用户

WordPress wp_set_auth_cookie() prevent duplicate users

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

1
2
3
4
5
6
7
8
9
10
11
12
13
    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');

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

使用wp_set_auth_cookie

在WordPress中对用户进行身份验证

但是由于尚未完全回答该问题,因此我的情况如下:

  • 用户1使用用户名1登录到PC 1

  • 用户2使用用户名2登录到PC 2

  • 用户名1显示为已登录

  • 所以我的问题是,如何使用wp_set_auth_cookie()功能登录用户,同时又不为所有用户显示相同的用户名?

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

    谢谢


    您正在使用一些不推荐使用的函数,并且没有正确传递username-变量$user_login未设置,您想使用$user->user_login。此外,不赞成使用get_userdatabylogin(),而推荐使用get_user_by()

    请尝试使用以下内容,请记住,这不会验证密码。有关更多信息,请参见wp_set_current_user()文档。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    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 );
            }
        }
    }