Как использовать REST API WordPress для входа пользователя?

Вопрос или проблема

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

Добавьте код в functions.php
И отправьте данные на маршрут

add_action( 'rest_api_init', 'register_api_hooks' );
// API кастомные конечные точки для WP-REST API
function register_api_hooks() {

    register_rest_route(
        'custom-plugin', '/login/',
        array(
            'methods'  => 'POST',
            'callback' => 'login',
        )
    );
}
    function login() {
        // Ваша логика здесь.
        return wp_signon( array(
    'user_login'    => $_POST['user_login'],
    'user_password' => $_POST['user_password'],
    'remember'      => $_POST['remember']
), false );

    }

Существует 3 способа аутентификации пользователя с использованием запроса REST API,

1- используя cookies, что позволяет WordPress отслеживать аутентифицированных пользователей в POST-запросах. Вы передаете данные аутентификации в ваш REST-запрос, используете wp_signon() функцию для входа пользователя, и если успешно, вы устанавливаете cookie аутентификации с помощью функции wp_set_auth_cookie() функция,

$creds = array(
    'user_login'    => 'example',
    'user_password' => 'plaintextpw',
    'remember'      => true
);

$user = wp_signon( $creds, false );

if ( is_wp_error( $user ) ) {
    $msg = $user->get_error_message();
}else{
  wp_clear_auth_cookie();
  wp_set_current_user ( $user->ID ); // Установить текущего пользователя
  wp_set_auth_cookie  ( $user->ID ); // Установить данные аутентификации в cookie
  $msg = "Успешно вошли в систему"; 
}

Вы можете найти обсуждение на форуме WordPress тема.

2- Использование запросов базовой аутентификации на ваш собственный сервер

идея здесь в том, что для каждого REST-запроса, который вы отправляете на сервер, вы каждый раз передаете учетные данные пользователя через SSL-соединение. Группа API для WordPress предоставляет плагин на своем репозитории GitHub, который позволяет закодировать учетные данные пользователя и декодировать их на другой стороне для аутентификации, так, например, для удаления сообщения пользователя на сервере,

let user="...", pw='...';
jQuery.ajax({
   url: 'http://your-domain/wp-json/wp/v2/posts/50',
   method: 'DELETE',
   crossDomain: true,
   beforeSend: function ( xhr ) {
       xhr.setRequestHeader( 'Authorization', 'Basic ' + Base64.encode( user + ':' + pw ) );
   },
   success: function( data, txtStatus, xhr ) {
       console.log( data );
       console.log( xhr.status );
   }
});

Для более подробной информации смотрите этот подробный учебник

3- использование сторонней аутентификации, такой как открытый OAuth.

Это то, что использует Google, и позволяет вашему сайту идентифицировать пользователей на основе их учетных данных для входа в Google. WordPress.com также использует этот метод для аутентификации блога.

Идея состоит в том, что ваши пользователи входят на сервер, который идентифицирует их (с использованием cookie в их браузере).

После аутентификации ваша страница (reactive js) отправляет запрос к серверу аутентификации, который, если подтвержден пользователем, возвращает токен доступа, который используется для аутентификации последующих REST-запросов.

Вы можете использовать сторонний сервис аутентификации, такой как Google, в таком случае вы можете следовать этому видео учебник который проводит вас по основам настройки проекта API Google для разрешения вашему приложению отправлять запросы аутентификации.

В качестве альтернативы, вы можете превратить ваш сервер WordPress в сервер OAuth, используя существующий плагин, такой как WP-OAuth Server, и его обширная документация.

Лучший способ “войти” пользователя на сайт – использовать форму входа WordPress. Как предлагают другие комментарии и ответы, сделать это в том виде, в каком подразумевает название вопроса, требует некоторого переосмысления колеса. Форма входа, помимо выполнения самого входа, также предоставляет обратную связь при сбое входа и предоставляет возможность сброса пароля.

Даже если вы стремитесь к полностью “безголовому” опыту WordPress, вы, вероятно, должны быть на 100% уверены в том, что усилия по переосмыслению формы входа оправданы.

Если вы имеете в виду аутентификацию пользователя с другого домена, это просто не сработает, так как cookies будут установлены только на домене сайта как я помню.

Таким образом, единственный допустимый случай использования – это сервер для серверной связи, в которой вам необходимо хранить cookies, которые вы получаете от вашего “вход” запрос и повторно использовать их в следующих запросах, но это подразумевает, что вы храните пользователя и пароль на вашем сервере, в случае чего использование паролей приложений может быть действительно лучшим решением.

Пароли приложений WordPress (введенные в WordPress 5.6) позволяют доступ к API через HTTP Basic Authentication. Вы используете имя пользователя WordPress и сгенерированный пароль приложения (найденный в вашем профиле пользователя) для аутентификации запросов.

Точные шаги

Войдите в панель администрирования WordPress:
Получите доступ к вашей панели управления WordPress (например, https://your-wordpress-site.com/wp-admin).

Перейдите к вашему профилю:
В левом меню щелкните на Пользователи, затем Профиль (или Ваш профиль).

Найдите раздел Пароли приложений:
Прокрутите вниз, пока не увидите раздел Пароли приложений.

Создайте новый пароль приложения:
Введите описательное имя для нового приложения (например, “Python App”).
Нажмите кнопку Добавить новый пароль приложения.
Важно: Скопируйте сгенерированный пароль немедленно, так как он не будет показан снова.

Используйте учетные данные для запросов API:
Соедините ваше имя пользователя WordPress и сгенерированный пароль приложения для аутентификации через HTTP Basic Authentication. Библиотека requests HTTPBasicAuth автоматически закодирует эти учетные данные в Base64.

Пример кода на Python:

import requests
from requests.auth import HTTPBasicAuth

# Замените на ваш URL сайта WordPress, имя пользователя и сгенерированный пароль приложения
site_url = "https://your-wordpress-site.com"
username = "your_username"
app_password = "your_application_password"

# Пример: GET сообщения
get_url = f"{site_url}/wp-json/wp/v2/posts"
response = requests.get(get_url, auth=HTTPBasicAuth(username, app_password))
print("GET response:", response.json())

# Пример: POST новое сообщение с данными
post_url = f"{site_url}/wp-json/wp/v2/posts"
data = {
    "title": "Hello World",
    "content": "Этот пост был создан через REST API с помощью пароля приложения.",
    "status": "publish"
}
response = requests.post(post_url, json=data, auth=HTTPBasicAuth(username, app_password))
print("POST response:", response.json())

.

Ответ или решение

Использование REST API WordPress для аутентификации пользователей представляет собой значимое решение для интеграции пользовательских действий с WordPress и получения более гибкого контроля над функциональностью сайта. В данном вопросе затрагивается тема аутентификации пользователей через REST API, используя предоставленные учетные данные (имя пользователя и пароль).

Теория

WordPress REST API предоставляет множество возможностей для интеграции с внешними приложениями, включая аутентификацию пользователей. На практике это означает, что вы можете создать пользовательский конечный пункт (endpoint) для обработки логина с использованием функции wp_authenticate(), а затем управлять сессией через куки или другие механизмы аутентификации.

Краткий обзор:

  1. Cookies: классический способ аутентификации пользователя, который WordPress использует для отслеживания авторизованных пользователей в POST-запросах. При успешной авторизации устанавливаются куки, используя функции wp_set_auth_cookie().

  2. Базовая аутентификация (Basic Authentication): требует передачи учетных данных с каждым запросом. Это стоит делать через SSL для обеспечения безопасности.

  3. Третьи стороны, такие как OAuth: более безопасный и универсальный метод.

Пример

В статье приводится пример создания настраиваемого конечного пункта для входа через REST API, добавляя код в файл functions.php. Вот его обновленный вариант:

add_action('rest_api_init', 'register_api_hooks');

function register_api_hooks() {
    register_rest_route(
        'custom-plugin', '/login/',
        array(
            'methods' => 'POST',
            'callback' => 'login_user',
        )
    );
}

function login_user() {
    $creds = array(
        'user_login'    => $_POST['user_login'],
        'user_password' => $_POST['user_password'],
        'remember'      => isset($_POST['remember']) ? $_POST['remember'] : false,
    );

    $user = wp_signon($creds, false);

    if (is_wp_error($user)) {
        return new WP_REST_Response(array(
            'message' => $user->get_error_message(),
            'success' => false,
        ));
    } else {
        wp_clear_auth_cookie();
        wp_set_current_user($user->ID);
        wp_set_auth_cookie($user->ID);

        return new WP_REST_Response(array(
            'message' => 'Вход выполнен успешно',
            'success' => true,
            'user_id' => $user->ID,
        ));
    }
}

Применение

  1. Настройка WP REST API конечного пункта: вставьте вышеуказанный код в файл functions.php вашей активной темы. Это создаст REST API маршрут по адресу https://your-domain/wp-json/custom-plugin/login/, который будет принимать POST-запросы для аутентификации пользователей.

  2. Отправка POST-запроса на конечный пункт: используйте инструмент вроде Postman или JavaScript для отправки запроса на ваш WordPress сайт. Образец JavaScript кода, отправляющий такой запрос, может выглядеть следующим образом:

fetch('https://your-domain/wp-json/custom-plugin/login/', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
    },
    body: JSON.stringify({
        user_login: 'example_user',
        user_password: 'example_pass',
        remember: true,
    }),
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
  1. Требования безопасности: при передаче учетных данных необходимо использовать HTTPS для защиты данных. Убедитесь, что ваш WordPress-сайт настроен на работу с SSL.

  2. Дополнительные методы аутентификации: рассмотрите возможность использования "Паролей приложений", появившихся в WordPress 5.6. Это дает возможность создавать пароли, которые могут быть использованы для авторизации API-запросов без фактической передачи пароля пользователя.

import requests
from requests.auth import HTTPBasicAuth

site_url = "https://your-wordpress-site.com"
username = "your_username"
app_password = "your_application_password"

response = requests.get(f"{site_url}/wp-json/wp/v2/posts", auth=HTTPBasicAuth(username, app_password))
print("GET response:", response.json())

Создание систем аутентификации через REST API WordPress требует тщательного изучения и понимания, чтобы обеспечить безопасность и надежность. Важно следовать рекомендациям и проверять возникающие ошибки, чтобы быть уверенным в корректной настройке системы.

Оцените материал
Добавить комментарий

Капча загружается...