删除程序化登录时的查询字符串参数

时间:2016-10-25 09:55:12

标签: php wordpress

情况:通过外部网站上的链接,用户可以重定向到wordpress页面,其中显示付款表单。此页面仅供登录用户访问。所以在链接中有一个参数(包含特定用户的用户名),用于进行程序化登录。

在程序化登录代码的最后,我已经实现了一些代码,以便从查询字符串中删除参数,并在没有progammatic登录参数的情况下重定向到新地址。

问题:并不总是会删除参数。

CODE:(它分为两个功能)

网址示例:http://www.example.com/?page_id=00&token=pippo

  1. 检查参数是否存在的函数(如果TRUE执行程序化登录)

    add_action('after_setup_theme', 'autologin', 2, 10);
    function autologin() {
        if(isset($_GET['token'])) { //autologin token is set
            $username = $_GET['token'];
            programmatic_login($username);
        }
    }
    
  2. 执行程序化登录并从查询字符串

    中删除参数的功能
    function programmatic_login( $username ) {
    
        if(is_user_logged_in()) {
            $current_user = wp_get_current_user(); 
            if($username != $current_user->user_login) {
                wp_logout();
            }
            else {
                //Remove the "token" from the URL + redirect
                $url = home_url( add_query_arg( null, null ));
                $parsed_url = parse_url($url);
                parse_str($parsed_url['query'], $parsed_str);
                unset($parsed_str['token']);
    
                $actual_link = "http://$_SERVER[HTTP_HOST]/?";
    
                $http_builded = $actual_link . http_build_query($parsed_str);
                // wp_redirect( $http_builded );
                header('Location: ' . $http_builded, true);
                exit();
                // die();
            }       
        }
    
        if(!is_user_logged_in()) {
            // Set the new User
            $user = get_user_by( 'login', $username );
            $user_id = $user->ID;
    
            wp_set_current_user( $user_id, $username );
            wp_set_auth_cookie( $user_id );
            // $user = wp_signon( array( 'user_login' => $username ) );
            do_action( 'wp_login', $username );
    
            if ( is_wp_error($user) ) {
                error_log(print_r( $user->get_error_message(), TRUE));
            }
    
            if ( is_a( $user, 'WP_User' ) ) {
    
                if ( is_user_logged_in() ) {
                    // Remove the "token" from the URL + redirect
                    $url = home_url( add_query_arg( null, null ));
                    $parsed_url = parse_url($url);
                    parse_str($parsed_url['query'], $parsed_str);
                    unset($parsed_str['token']);
    
                    $actual_link = "http://$_SERVER[HTTP_HOST]/?";
    
                    $http_builded = $actual_link . http_build_query($parsed_str);
                    // wp_redirect( $http_builded );
                    header('Location: ' . $http_builded, true);
                    exit();
                    // die();
                }
            }
        }
    }
    
  3. 结果:登录始终成功,但有时不会删除此参数。更少见的是,没有发生重定向,因为我发现表单的预填充字段仍然是旧的(当我从一个用户切换到另一个用户时)。

    有人看到一些错误吗?或者您是否有任何建议可以获得更具体的信息或者做得更好?

    P.S。:我需要进行重定向,因为它解决了表单提交时wp_verify_nonce()的问题

0 个答案:

没有答案