Zintegrowane logowanie cms z forum
Feb 06
Projektowałem wiele serwisów, które miały zintegrowane z forum komponenty takie jak:
- rejestracja,
- przypomnienie hasła,
- zmiana hasła, nicku lub adresu email,
- usunięcie konta.
Wówczas nie było żadnego problemu – wystarczyło wszystkie te akcje z forum przekierować na URL’e obsługiwane przez CMS, który zajmował się zmianami tabelach forum. Dlaczego przekierować? Jeżeli ktoś rejestruje się w serwisie, jest zarejestrowany na forum, natomiast, gdy rejestruje się na forum, nie jest rejestrowany w serwisie. To CMS integrujemy z forum, a nie forum z CMS’em (chyba, że zamierzamy inaczej, wtedy na odwrót).
Ostatnio klient zażyczył sobie, żeby zintegrowane było również logowanie. Nie najlepiej widzi mi się implementacja systemu autoryzacji z forum w CMS’ie, więc poszedłem “na łatwiznę”, bowiem miałem do czynienia z phpBB. Do osiągnięcia celu postanowiłem wykonać dwa kroki:
- wysłać żądanie POST do forum na adres logowania z wypełnionymi polami POST z formularza logowania w CMS’ie,
- przechwycić wysłane przez forum ciasteczka i przekazać je użytkownikowi.
Do połączenia się z forum via http użyłem HttpRequest. Wyszło z tego parę linijek kodu.

Pokazałeś jak dokonać autentykacji użytkownika z wykorzystaniem (potencjalnych) danych w zewnętrznym serwisie. Żadna mi to integracja. Po prostu wykorzystanie mechanizmów HTTP do “przechwycenia” danych. Zauważ, że ma to bardzo poważną wadę, to Twoje rowiązanie – nie możesz sprawdzić, czy użytkownik jest zalogowany, spoglądając na statystyki online forum. W drugą stronę też to średnio będzie wyglądać.
Wpis powinien się nazywać “autentykacja użytkownika z zewnętrznego serwisu”.
Zewnętrznego serwisu? Nie wyobrażam sobie, jak po przechwyceniu ciasteczek z poczty onetu mógłbym je przekazać użytkownikowi z poziomu tego skryptu do przeglądarki. Taki przypadek przejdzie tylko wówczas, gdy serwis zewnętrzny:
• jest w tej samej domenie, pod innych pathem,
• jest w subdomenie *.example.com lub jest example.com
Ale wtedy nie mamy styczności z “zewnętrznym serwisem”, bo ograniczają nas te 2 przypadki. Wniosek: proponowany tytuł jest błędny.
Zastanawiam się tylko, po co mi widzieć, czy użytkownik jest on-line na forum, czy nie. Jeżeli zaloguję go na chama, sesja zostanie stworzona/uaktualniona. Tak bynajmniej jest w phpBB.
Jak to w jaki sposób. Normalnie pobierasz cookiesy. Przecież wysyłasz dane do zalogowania, zaraz po zalogowaniu HttpResponse zwraca cookiesy świeże. Sam je przecież w kodzie przechwytujesz. Na takiej samej zasadzie działają premium downloadery dla Rapidshare (wiem, bo sam pisałem takowy). Zatem możliwe jest zalogowanie się na zewnątrz i pobranie cookiesów, które serwis zwróci. Jak w takim razie miałyby (swego czasu) działać skrypciki do OGame?
Mówimy o innym logowaniu :P Moim zadaniem było zalogowanie użytkownika na forum i pozostawienie sesji zalogowania bez konieczności przechowywania ciastek użytkownika na serwerze i wyświetlaniu mu responseBody, tylko aby sam poruszał się własną przeglądarką bezpośrednio po forum. Ty mówisz o sposobie logowania bez wysyłania ciastek użytkownikowi, tylko obsługi responseBody przez skrypt.
Mówię o ciastkach. Ty pobierasz ciastko i pozwalasz użytkownikowi robić z nim co chce. Dzięki temu można przeglądać strony (ciastko z forum jest “dopisane” do cmsa). Równie dobrze działać to powinno dla zewnętrznego źródła ciastka.
Generalnie, przyjąłeś nieinwazyjny sposób powiązania autentykacji użytkownika z wykorzystaniem danych z forum. To nie integracja. Dalej założenie konta możliwe jest tylko na forum. To, co pokazałeś, to sposób na autentykację użytkownika danymi z innej usługi.
Założenie konta tylko na forum nie jest możliwe. Tak samo ze zmianą hasła, emaila i ew. usunięcie konta. Wszystko przekierowywane jest na CMS (redirect), który ingeruje w tabele forum, co wyklucza przypadek rozbieżności obu tabel użytkowników. Jeżeli autoryzacja użytkownika w CMS da rezultat negatywny, wówczas nie wysyłamy requesta do zalogowania się na forum. Logowanie na forum odbywa się dopiero po pozytywnym przejściu autoryzacji na forum, ponieważ te same są (dane potrzebne do logowania):
- nicki / emaile,
- hasła.
Słusznie, że pociągnąłeś mnie o to za język, żeby nie było potem niedomówień :)
Tak offotopowo – gdzie studiujesz, bo w “o mnie” nic nie ma?
@snaj: Athlan nie studiuje. Jeszcze liceum nie ukończył.
@Athlan: To się cieszę, że udało się wyjaśnić tę kwestię. Bo było to lekko mylące.
jak uzyc HttpRequest. bo szukam od wczoraj w google i nic sensownego nie znalazlem i caly czas mam Fatal error: Class ‘HTTPRequest’ not found… dodalem juz php_http.dll w php.ini i zainstalowalem wszystko co mialo w nazwie request.
Próbowałem zrobić coś podobnego i kiedy uruchomiłem to, to wyświetlało się:
Fatal error: Class ‘HttpRequest’ not found in /home/kacloc/public_html/add.php on line 10
Ten artykul zawiera informacje ktorych szukalem czytalem go z przyjemnoscia. trzymaj sie