Get user ID after logging in

时间:2015-05-08 作者:user2941726

我被要求在一个网站上添加一种安全机制,在这个网站上,用户只有在登录后设置了cookie,才能访问自己的个人资料,而且最多只能有3个cookie。我在数据库中建立了一个表来存储cookies,这样我就可以对它们进行计数。

我真的不知道WordPress是如何工作的,但我发现我需要编辑主题functions.php 使用文件和添加操作wp_login. 我编辑了functions.php 文件,添加了操作,请求用户ID,然后返回0. 我知道这就是wp_get_current_user 应该会起作用,它会回来0 如果没有人登录;但是,用户已登录,但仍不会返回ID。以下是代码:

add_action( \'wp_login\', \'login_cookie\' );
function login_cookie() {
    global $wpdb;
    $user = wp_get_current_user();
    //Get current user
    $id = $user->ID;

    if(!isset($_COOKIE[\'userCookie\'])) {
        // Query the database to see how many cookies they have used
        $cookie_count = $wpdb->get_var("SELECT COUNT(*) FROM wp_cookies WHERE user_id=".$id."");
        // If the returned value is bigger or equal to 3 than the user cannot login
        // they will be logged out, and redirected
        if($cookie_count >= 3) {
            wp_logout();   
            wp_redirect("");                
        }
        //Else they can login and they recieve a new cookie, which will get inserted into the database 
        else {
            $value = password_hash($id,PASSWORD_DEFAULT);
            setcookie(\'userCookie\', $value, time()+360000*24*100, "", "",false);
            $wpdb->insert(
                "wp_cookies",
                [ \'user_id\'=>$id, \'cookie_value\'=>$value ],
                [ \'%d\', \'%s\' ]
            );
        }
    }
}
此外,这只会影响普通用户,而不会影响管理员。有什么想法吗?

2 个回复
最合适的回答,由SO网友:Jayson 整理而成

wp_login 钩子提供对两个参数的访问:$user->user_login (字符串)和$user (WP\\U用户)。要将它们传递到函数中,需要添加优先级(默认值为10),并从add\\u action()调用中请求2个参数:

function login_cookie($user_login, $user) {
    global $wpdb;

    var_dump($user); // get WP_User object

    //Get current user ID
    $id = $user->ID;
    .....
}

add_action( \'wp_login\', \'login_cookie\', 10, 2 );

SO网友:Emetrop

实际上wp_login 钩子正在其参数中传递用户对象。

function login_cookie( $user_login, $user ) {
    $user_id = $user->ID; // get user id
    // your next code
}
add_action( \'wp_login\', \'login_cookie\', 10, 2 );

结束

相关推荐

Redirect User to login page

嗯,我是WP的新手,这个问题听起来可能重复,但即使尝试了几天,我也无法做到这一点。我已经在我的WP网站中集成了一个自定义登录和注册表单,它与通常的WP登录和注册表单不同。我需要执行以下操作如果直接访问任何页面URL,请将用户重定向到登录页面。如果直接访问登录/注册URL,请将用户重定向到主页如果用户在登录后试图访问登录/注册URL,我会使用以下代码将用户重定向到主页function checkUser(){ $user = wp_get_current_user(); if (