Я работаю над приложением ajax, которое будет встроено в страницу WordPress. Приложение ajax обменивается данными с сервлетами, работающими на tomcat. Теперь сервлетам нужен способ определить, приходит ли запрос от пользователя, который вошел в WordPress. И если пользователь вошел в систему, сервлеты также должны быть в состоянии определить идентификатор пользователя, чтобы иметь возможность запрашивать базу данных. Если пользователь не вошел в систему, запрос будет отклонен.
Другими словами, мне нужно разрешить сервлету выполнять запрос, только если пользователь, вызвавший запрос, вошел в WordPress (версия 3.3.x). И сервлет (tomcat), и wordpress (apache2) работают на одной физической машине и совместно используют одну и ту же базу данных.
Теоретически это можно легко решить, выполнив следующее:
- Во время входа в WordPress некоторые пользовательские токены сохраняются в переменной javascript.
- Приложение ajax перенаправляет токен пользователя сервлетам при каждом вызове.
- Сервлеты используют токен для запроса WordPress, если он действителен (т. Е. Если пользователь вошел в систему), и выполняют или отклоняют запрос.
Вопрос в том, как это можно реализовать на стороне WordPress?
Потому что то, что делает теорию настолько сложной, это то, что я еще не занимался программированием на php.
Сначала я подумал о том, чтобы передать cookie-файл wordpress_logged_in (auth) сервлету и позволить сервлету запрашивать wordpress, если cookie-файл auth все еще действителен. Но, как кажется, это невозможно сделать, так как wp_validate_auth_cookie () всегда терпит неудачу, даже если передаются cookie-данные вошедшего в систему пользователя. Другое решение может заключаться в разработке плагина, который хранит идентификатор сеанса и идентификатор пользователя в таблице, к которой легко могут быть запрошены сервлеты. Или, может быть, есть другое решение ...
источник
Ответы:
WordPress уже имеет API, встроенный через сервер XMLRPC. Это означает, что вы можете сделать запрос XMLRPC из вашего Java-приложения и проверить имя пользователя / пароль. К сожалению, нет способа просто пройти аутентификацию через него как есть.
Тем не менее, это очень легко свернуть свой собственный. Просто подключите
xmlrpc_methods
фильтр и добавьте свой. Ключ массива, который вы добавляете, будет методом xmlrpc, который вы вызываете из своего приложения, а значением будет функция, которая вызывается сервером WordPress XMLRPC.И функция обратного вызова
wpse39662_check_login
получит один аргумент, массив вещей, отправленных на сервер XMLRPC.Вот все это как плагин . С этим установленным и включенным XMLRPC на вашем сайте WP вы сможете отправлять запросы с помощью некоторого клиента XMLRPC (я уверен, что в Java он есть).
Вот код, который я использовал для проверки выше (клиент Python XMLRPC).
источник
Wordpress (в настоящее время) проверяет, вошел ли пользователь в систему, проверив один из файлов cookie, которые он выдает при входе в систему. Он создает содержимое этого файла cookie путем некоторого хеширования. Подробности в функции "wp_generate_auth_cookie" в /wp-includes/pluggable.php:
Вы можете заново создать этот алгоритм (используя эту и другие функции auth_cookie) в своем коде Java, чтобы выполнить те же проверки. JS может быть использован, чтобы убедиться, что куки отправляются на ваш сервлет.
В противном случае XMLRPC может быть хорошей идеей. Вы можете написать новый метод (как объяснено в другом решении здесь) для проверки подлинности cookie (вместо проверки имени пользователя и пароля, как это обычно делается).
источник
Получите плагин Exec-PHP , а затем создайте страницу WordPress (а не пост) с хорошей permalink (
http://mysite/user_id/
) и кодом вget_current_user_id()
справочнике по API :Затем вы можете извлечь куки, которые клиент отправляет вам, и поместить их в
GET
запросhttp://127.0.0.1/user_id/
. Тогда вы узнаете, вошел ли пользователь в систему и какой у него идентификатор пользователя.источник
Вы могли бы сделать что-то вроде этого на страницах без wp:
источник
Это плагин WordPress с одним файлом, который делает работу:
По сути, он предоставляет новый метод XML-RPC, с помощью которого вы можете попросить WordPress проверить
wordpress_logged_in_...
cookie.Затем вам нужно написать некоторый код для запроса этого метода и передать ему значение
wordpress_logged_in_...
cookie.Этот метод возвращает либо
false
(если cookie не проверяется), либо идентификатор пользователя, если проверка прошла успешно.источник