Pracuję nad aplikacją ajax, która zostanie osadzona na stronie wordpress. Aplikacja ajax wymienia dane z serwletami działającymi na tomcat. Teraz serwlety potrzebują sposobu, aby ustalić, czy żądanie pochodzi od użytkownika zalogowanego do wordpress. A jeśli użytkownik jest zalogowany, serwlety muszą także być w stanie określić identyfikator użytkownika, aby móc wysłać zapytanie do bazy danych. Jeśli użytkownik nie jest zalogowany, żądanie zostanie odrzucone.
Innymi słowy, muszę pozwolić serwletowi wykonać żądanie tylko wtedy, gdy użytkownik, który spowodował żądanie, jest zalogowany w wordpress (wersja 3.3.x). Zarówno serwlet (tomcat), jak i wordpress (apache2) działają na tej samej maszynie fizycznej i współużytkują tę samą bazę danych.
Teoretycznie można to łatwo rozwiązać, wykonując następujące czynności:
- Podczas logowania wordpressa token użytkownika jest przechowywany w zmiennej javascript.
- Aplikacja ajax przekazuje token użytkownika do serwletów przy każdym wywołaniu.
- Serwlety używają tokena do zapytania o wordpress, jeśli jest on prawidłowy (tj. Jeśli użytkownik jest zalogowany) i wykonania lub odrzucenia żądania.
Pytanie brzmi, jak można to zaimplementować po stronie wordpress?
Ponieważ to, co czyni teorię tak skomplikowaną, to fakt, że nie zrobiłem jeszcze żadnego programowania php.
Najpierw myślałem o przesłaniu ciasteczka wordpress_logged_in (auth) do serwletu i pozwoliłem, aby serwlet zapytał o słowo, jeśli plik cookie auth jest nadal ważny. Ale jak się wydaje, nie można tego zrobić, ponieważ wp_validate_auth_cookie () zawsze kończy się niepowodzeniem, nawet jeśli przekazywane są dane cookie zalogowanego użytkownika. Innym rozwiązaniem może być opracowanie wtyczki przechowującej identyfikator sesji i identyfikator użytkownika w tabeli, do której aplety mogłyby łatwo zapytać. A może istnieje inne rozwiązanie ...
źródło
Odpowiedzi:
WordPress ma już wbudowany interfejs API za pośrednictwem serwera XMLRPC. Oznacza to, że możesz wykonać żądanie XMLRPC z aplikacji Java i zweryfikować nazwę użytkownika / hasło. Niestety, nie ma sposobu, aby uwierzytelnić się za pomocą tego, co jest.
To powiedziawszy, bardzo łatwo jest rzucić własny. Wystarczy podłączyć
xmlrpc_methods
filtr i dodać swój. Klucz tablicy, który dodajesz, to metoda xmlrpc wywoływana z aplikacji, a wartością będzie funkcja wywoływana przez serwer WordPress XMLRPC.A funkcja zwrotna
wpse39662_check_login
otrzyma jeden argument, tablicę rzeczy wysłaną do serwera XMLRPC.Oto wszystko jako wtyczka . Po zainstalowaniu i włączeniu XMLRPC w witrynie WP, możesz być w stanie wysyłać żądania za pomocą klienta XMLRPC (jestem pewien, że Java go ma).
Oto kod, którego użyłem do przetestowania powyższego (klient Python XMLRPC).
źródło
Wordpress (obecnie) sprawdza, czy użytkownik jest nadal zalogowany, sprawdzając jeden z plików cookie, które podaje podczas logowania. Konstruuje zawartość tego pliku cookie, wykonując pewne haszowanie. Szczegóły znajdują się w funkcji „wp_generate_auth_cookie” w /wp-includes/pluggable.php:
Możesz ponownie utworzyć ten algorytm (używając tej i innych funkcji auth_cookie) w kodzie Java, aby wykonać te same kontrole. JS może być wykorzystany do upewnienia się, że plik cookie zostanie przesłany do twojego serwletu.
W przeciwnym razie dobrym pomysłem może być XMLRPC. Możesz napisać nową metodę (jak wyjaśniono w innym rozwiązaniu tutaj), aby sprawdzić poprawność pliku cookie uwierzytelniania (zamiast sprawdzania poprawności nazwy użytkownika i hasła, jak to zwykle bywa).
źródło
Pobierz wtyczkę Exec-PHP , a następnie utwórz stronę WordPress (nie post) z ładnym permalink (
http://mysite/user_id/
) i kodem wget_current_user_id()
interfejsie API :Następnie możesz wyodrębnić pliki cookie, które klient wysyła do ciebie, i złożyć je w
GET
żądaniuhttp://127.0.0.1/user_id/
. Wtedy będziesz wiedział, czy użytkownik jest zalogowany i jaki jest jego identyfikator użytkownika.źródło
Możesz zrobić coś takiego na stronach innych niż wp:
źródło
To jest jednoplikowa wtyczka WordPress, która wykonuje zadanie:
Zasadniczo ujawnia nową metodę XML-RPC, za pomocą której można poprosić WordPress o sprawdzenie poprawności
wordpress_logged_in_...
pliku cookie.Następnie musisz napisać kod, aby wysłać zapytanie do tej metody i przekazać jej wartość
wordpress_logged_in_...
pliku cookie.Ta metoda zwróci albo
false
(jeśli plik cookie nie zostanie sprawdzony), albo identyfikator użytkownika, jeśli sprawdzenie się powiedzie.źródło