Ссылка для автоматического входа в Wordpress работает только при двойном нажатии или перезагрузке

У меня есть сайт Wordpress, и я настроил PHP-скрипт автологина, который проверяет значение KEY в URL-адресе, которое соответствует пользователю в таблице, а затем регистрирует этого пользователя на сайте. У меня это есть, потому что у меня есть пользователь, который запросил возможность входа на сайт, просто щелкнув ссылку и не вводя каждый раз имя пользователя и пароль.

Я заставил его работать, странно то, что он работает только иногда. Когда пользователь нажимает на ссылку, он переходит на целевую страницу для этого пользователя.

Ссылка для автоматического входа выглядит следующим образом: https://mywebsite.org/home/autologin.php?key=54321

Иногда, когда нажимают на ссылку, она просто находится на этом URL-адресе, в других случаях она правильно входит в систему и перенаправляет на URL-адрес целевой страницы: https://mywebsite.org/library-portal-landing-page/

Когда ссылка просто останавливается и находится на URL-адресе автоматического входа, страница будет перенаправляться и загружаться, если ссылка для автоматического входа перезагружается, и я не уверен, почему иногда ее нужно перезагружать, а в других случаях она просто работает.

Вот мой PHP-скрипт autologin.php:

<?php
require_once("wp-load.php");
global $wpdb;

// Check if user is already logged in, redirect to account if true
if (!is_user_logged_in()) {

// Check if the key is set and not emtpy
if(isset($_GET['key']) && !empty($_GET['key'])){

    // Sanitize the received key to prevent SQL Injections
    $received_key = sanitize_text_field($_GET['key']);
   
    // Find the username from the database using the received key
    $get_username = $wpdb->get_var($wpdb->prepare("SELECT avatar FROM wp_autologin WHERE random_key = %s", $received_key ) );
   
    // Check if query returned a result, throw an error if false
    if(!empty($get_username)){
   
        // Get user info from username then save it to a variable
        $user = get_user_by('login', $get_username );
       
        // Get the user id then set the login cookies to the browser
        wp_set_auth_cookie($user->ID);
       
        // To make sure that the login cookies are already set, we double check.
        foreach($_COOKIE as $name => $value) {
           
            // Find the cookie with prefix starting with "wordpress_logged_in_"
            if(substr($name, 0, strlen('wordpress_logged_in_')) == 'wordpress_logged_in_') {
           
                // Redirect to account page if the login cookie is already set.
                wp_redirect( home_url('/library-portal-landing-page/') );
               
            } else {
           
                // If NOT set, we loop the URL until login cookie gets set to the browser
                wp_redirect( home_url('/home/autologin/?key=' . $received_key) );
                   
            }
        }
       
    } else {
        echo 'Invalid Authentication Key';
    }
} else {
    wp_redirect( home_url() );
}

} else {
wp_redirect( home_url('/library-portal-landing-page/') );
exit;
}
?>

person Community    schedule 10.11.2020    source источник


Ответы (1)


Я заставил его работать, добавив перенаправление javascript для запуска через несколько секунд, что помогло, я добавил это после конца файла PHP:

<script>
    setTimeout(function () {
    window.location.href = "https://mywebsite.org/library-portal-landing-page/";
        }, 2000);
</script>
person Community    schedule 10.11.2020