检查用户是否已自动登录,如果已登录,则注销

时间:2021-09-08 作者:BarrieO

我正在尝试创建一个自动登录用户的功能,但如果初始登录是通过自动登录获得的,那么在访问某些页面时也会执行自动登录。

我已经编写了以下代码,但我想我对autologin布尔值的布尔检查不起作用。

/* AUTO LOGIN / LOGOUT */
function autologinout() {
    global $wp;

    // Autologin
    if( isset($_GET[\'username\']) ) {
        $user = get_user_by(\'login\', $_GET[\'username\']);

        // Redirect URL //
        if ( !is_wp_error( $user ) ) {
            if ( in_array( \'customer\', (array) $user->roles ) ) {
                wp_clear_auth_cookie();
                wp_set_current_user ( $user->ID );
                wp_set_auth_cookie  ( $user->ID );
                wp_redirect( \'/lovelists/toon-lovelist/\' );
                $autologin = true;
                exit();
            }
        }
    }

    // Autologout
    $path = $_SERVER[\'REQUEST_URI\'];
    if ( is_user_logged_in() && $autologin = true  && ( $path == \'/lovelists/maak-lovelist/\' || $path == \'/lovelists/login/\' ) ) {
        wp_clear_auth_cookie(); // so you don\'t get the cache error
        wp_logout(); // this will logout user
        $autologin = false;
    }
}

add_action( \'init\', \'autologinout\' );
知道我做错了什么吗?

1 个回复
SO网友:BarrieO

根据@JacobPeattie关于使用cookie的建议,我为这个问题构建了以下工作解决方案:

/* LOGIN / LOGOUT */
/* --- */
/* AUTOLOGIN */
if( isset($_GET[\'username\']) ) {
    $user = get_user_by(\'login\', $_GET[\'username\']);

    // Redirect URL //
    if ( !is_wp_error( $user ) ) {
        if ( in_array( \'customer\', (array) $user->roles ) ) {
            wp_clear_auth_cookie();
            wp_set_current_user ( $user->ID );
            wp_set_auth_cookie  ( $user->ID );

            wp_redirect( \'/lovelists/toon-lovelist/\' );

            $autologin = 1;
            setcookie( \'autologin_status\', $autologin, time()+31556926 , "/" );
            exit();
        }
    }
}

/* AUTOLOGOUT */
function log_out_user() {
global $wp;
$path = $_SERVER[\'REQUEST_URI\'];
    if ( is_user_logged_in() && $_COOKIE[\'autologin_status\'] == 1 && ( $path == \'/lovelists/maak-lovelist/\' || $path == \'/lovelists/login/\' ) ) {
        wp_logout(); // this will logout user
        unset( $_COOKIE[\'autologin_status\'] );
    }
}

add_action( \'init\', \'log_out_user\' );

相关推荐

ServerSideRender和Media Object:将图像数据对象传递给php呈现器的属性,即使它未设置

编辑:简单地说,我遇到的问题是,在js端保存为属性的图像数据对象(js中的imgDataObj)正在传递到PHP端,即使我没有在serversiderender组件中传递它,也没有在PHP渲染回调中侦听它。我有一个自定义脚本,可以创建具有自定义大小的图像集。我正试着把它放到一个街区里。ServerSideRender似乎是一条出路。我用它制作了一些块,但从来没有一块有图像。因此,用户可以从媒体库上传/拾取图像,并为每个断点设置自定义大小。块将图像的大小和ID号发送到PHP端。我们不需要整个图像对象。例如,