API REST: wp_get_current_user не работает во втором вызове

Я работаю над многоступенчатым процессом регистрации, и сейчас у меня проблема. То, что я пытаюсь достичь, – это первый вызов, отправляющий информацию, необходимую пользователю для регистрации, чтобы создать его и зарегистрировать в нем, а затем попросить его обновить ранее случайно сгенерированный пароль на втором шаге. Все делается с использованием AJAX и WordPress REST API, так что перезагрузка страницы отсутствует. Я наблюдаю, что мой шаг номер один правильно генерирует пользователя и регистрирует его с помощью этого кода:

$password = wp_generate_password(); $userdata = array( 'user_login' => $email, 'user_email' => $email, 'user_pass' => $password, 'display_name' => $firstname . ' ' . $name, 'first_name' => $firstname, 'last_name' => $name, 'role' => 'subscriber', 'user_registered' => (new \DateTime())->format('Ymd H:i:s') ); $user_id = wp_insert_user( $userdata ) ; // Autologin after registration wp_set_current_user($user_id); if (wp_validate_auth_cookie()==FALSE) { wp_set_auth_cookie($user_id, true, false); } 

Но вызов wp_get_current_user или global $current_user во время дополнительного шага для обновления сгенерированного пароля извлекается только 0. Код:

 $response = null; $current_user = wp_get_current_user(); var_dump( $current_user ); 

Вернуть:

 object(WP_User)#3217 (7) { ["data"]=> object(stdClass)#3218 (0) { } ["ID"]=> int(0) ["caps"]=> array(0) { } ["cap_key"]=> NULL ["roles"]=> array(0) { } ["allcaps"]=> array(0) { } ["filter"]=> NULL 

}

Вы знаете, почему? Это нормальное поведение? Для получения информации, я использую аутентификацию cookie, поскольку код Javascript, вызывающий мой пользовательский API, встроен в мою пользовательскую тему.

Заранее спасибо,

После целого дня копания и отладки через супер-пуперные основные функции WordPress я понял, что основная проблема заключалась в том, что токен сеанса, используемый для создания и проверки несов, не был эквивалентным. Я пробовал разные вещи, в итоге wp_set_auth_cookie метод wp_set_auth_cookie указав цель cookie 'logged_in'.

Затем я влюбился в эту тему: Расширьте сессию WordPress (4.x) и nonce, где у парня, похоже, есть проблема, похожая на мою.

Я сделал это, добавив следующие действия в моем классе:

 /** * login_force_update_cookie - Specific action for force overriding the logged_in_cookie * when being in the AJAX registration context * * @param {type} $logged_in_cookie description * @return {type} description */ public function login_force_update_cookie( $logged_in_cookie ) { if ( strstr( $_SERVER['REQUEST_URI'], 'toto/user/register' ) ) { $_COOKIE[LOGGED_IN_COOKIE] = $logged_in_cookie; } } 

И немного изменив мой код, который теперь выглядит следующим образом:

 wp_set_current_user($user_id); if ( wp_validate_auth_cookie( '', 'logged_in' ) != $user_id ) { wp_set_auth_cookie( $user_id ); } // Storing the regitration event for the user $this->saveLoginEvent( $user_id ); $data = array( 'user_id' => $user_id, 'nonce' => wp_create_nonce( 'wp_rest' ), 'message' => 'user_created' ); $response = rest_ensure_response( $data ); 

И это, по-видимому, устранило основную проблему, являясь несогласованностью между несами, сгенерированными в первом ответе AJAX и проверенными во время второго. Проблема с wp_get_current_user возвращающая 0, состояла в том, что когда nonces не удовлетворены, wordpress устанавливает по умолчанию значение 0.

Довольно сложный, сделал мой день, когда я многому научился!

Спасибо за внимание,