Выход из системы с помощью ссылки (без nonce)

26 окт. 2016 г., 13:20:08
Просмотры: 7.33K
Голосов: 1

Этот вопрос задает абсолютный не-программист - и он уже задавался в разных формах несколько раз (например, здесь).

Для правильного выхода из системы URL, который это активирует, требует nonce, например:

http://xyz/wp-login.php?action=logout&redirect_to=http%3A%2F%2Fwww.spiegel.de&_wpnonce=d9d1a28ef2

Мы можем получить nonce, как описано в кодексе. НО: что если мне нужно активировать выход из системы с помощью URL. Точнее: мой плагин CiviCRM имеет формы, которые пользователи могут заполнять, и после завершения перенаправляют пользователя куда-то еще -> например, выйти из системы и перейти на другую страницу. Я могу скопировать/вставить URL перенаправления в форму, например:

http://xyz/wp-login.php?action=logout&redirect_to=http%3A%2F%2Fwww.spiegel.de

-> как мне получить nonce там, где он должен быть - или есть альтернативы???

Спасибо!

3
Комментарии

Nonce основаны на времени и привязаны к пользователю - единственный способ получить их - через WordPress. Вам нужно либо "встроиться" в CiviCRM и найти способ динамически передавать URL перенаправления (вместо того, чтобы копировать/вставлять его в настройки), либо отключить проверку nonce в процессе выхода (не рекомендуется)

TheDeadMedic TheDeadMedic
26 окт. 2016 г. 14:08:36

Так и думал - спасибо (тогда закрою вопрос). Просто из интереса - хотя это и не рекомендуется - как можно отключить проверку nonce? Спасибо!

Abteilung Gerontopsychiatrie Abteilung Gerontopsychiatrie
26 окт. 2016 г. 15:21:53

Я напишу ответ.

TheDeadMedic TheDeadMedic
26 окт. 2016 г. 15:30:27
Все ответы на вопрос 1
1

Это отключит проверку nonce при выходе из системы - последствия на вашей совести:

add_action( 'login_form_logout', function () {
    $user = wp_get_current_user();

    wp_logout();

    if ( ! empty( $_REQUEST['redirect_to'] ) ) {
        $redirect_to = $requested_redirect_to = $_REQUEST['redirect_to'];
    } else {
        $redirect_to = 'wp-login.php?loggedout=true';
        $requested_redirect_to = '';
    }

    /**
     * Фильтр URL для перенаправления после выхода.
     *
     * @since 4.2.0
     *
     * @param string  $redirect_to           URL для перенаправления.
     * @param string  $requested_redirect_to Запрошенный URL для перенаправления, переданный как параметр.
     * @param WP_User $user                  Объект WP_User для пользователя, выходящего из системы.
     */
    $redirect_to = apply_filters( 'logout_redirect', $redirect_to, $requested_redirect_to, $user );
    wp_safe_redirect( $redirect_to );
    exit;
});
26 окт. 2016 г. 15:33:01
Комментарии

Я просто заменил $redirect_to = '/'; для перенаправления на главную страницу после выхода из системы.

Laxmikant Bhumkar Laxmikant Bhumkar
1 янв. 2022 г. 19:35:12