Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] integracja logowania strony z forum phpBB3 - ROZWIĄZANE
Forum PHP.pl > Forum > Gotowe rozwiązania > Skrypty forum
KCG
Praktycznie połączyłem już logowanie z forum, z tym, że jak zaloguję się formularzem na stronie, to jestem przekierowany na forum. Jakoś nie mogę znaleźć fragmentu odpowiadającego za to przekierowanie. Adres przekazuje zmienna $_GET['url'], w przypadku wylogawnia zrobiłem tak:
  1. <?php
  2. case 'logout':
  3. if ($user->data['user_id'] != ANONYMOUS && isset($_GET['sid']) && !is_array($_GET['sid']) && $_GET['sid'] === $user->session_id)
  4. {
  5. $user->session_kill();
  6. $user->session_begin();
  7. if ($_GET['url']) { // to dodałem
  8. header('Location: '.urldecode($_GET['url']));
  9. exit; 
  10. } // koniec mego kodu;)
  11. $message = $user->lang['LOGOUT_REDIRECT'];
  12. }
  13. else
  14. {
  15. $message = ($user->data['user_id'] == ANONYMOUS) ? $user->lang['LOGOUT_REDIRECT'] : $user->lang['LOGOUT_FAILED'];
  16. }
  17. meta_refresh(3, append_sid(&#092;"{$phpbb_root_path}index.$phpEx\"));
  18.  
  19. $message = $message . '
  20.  
  21. ' . sprintf($user->lang['RETURN_INDEX'], '<a href=\"' . append_sid(&#092;"{$phpbb_root_path}index.$phpex\") . '\">', ' ');
  22. trigger_error($message);
  23.  
  24. break;
  25. ?>

A logowanie pośrednio jest tu:
  1. <?php
  2. case 'login':
  3. if ($user->data['is_registered'])
  4. {
  5. redirect(append_sid(&#092;"{$phpbb_root_path}index.$phpEx\"));
  6. }
  7. login_box(request_var('redirect', &#092;"index.$phpEx\"));
  8. break;
  9. ?>

Może ktoś to robił i wie, gdzie szukać? smile.gif
Z góry dzięki.

No doszedłem, bo sprawa dosyć prosta, jest pole hidden 'redirect', tylko, że przez to pole przekierowuje http://strona/forum/dopiero mój adres, jest możliwość przejść wyżej do katalogu? ./ i ../ nie działa sad.gif

Sam doszedłem tongue.gif w polu trzeba podać pełny adres strony z http:// i działa. Z tym, że najpierw strona z info forum 'zostałeś zalogowany', ale po kilku sekundach lub kliknięciu w link następuje przekierowanie smile.gif
Ew. jakby ktoś wiedział, jak zrobić, aby bezpośrednio przekierował (jakby używając header('Location: ...')) byłbym wdzięczny winksmiley.jpg </a href=\"' . append_sid(\"{$phpbb_root_path}index.$phpex\") . '\"></br ></br >
Draz
Dzisiaj nad tym siedzialem i wymyslilem takie rozwiazanie:

W pliku includes/functions.php jest funkcja login_box()

  1. <?php
  2. // The result parameter is always an array, holding the relevant information...
  3.            if ($result['status'] == LOGIN_SUCCESS)
  4.            {
  5.                $redirect = request_var('redirect', "{$phpbb_root_path}index.$phpEx");
  6.                $message = ($l_success) ? $l_success : $user->lang['LOGIN_REDIRECT'];
  7.                $l_redirect = ($admin) ? $user->lang['PROCEED_TO_ACP'] : (($redirect === "{$phpbb_root_path}index.$phpEx" || $redirect === "index.$phpEx") ? $user->lang['RETURN_INDEX'] : $user->lang['RETURN_PAGE']);
  8.    
  9.                // append/replace SID (may change during the session for AOL users)
  10.                $redirect = reapply_sid($redirect);
  11.    
  12.                // Special case... the user is effectively banned, but we allow founders to login
  13.                if (defined('IN_CHECK_BAN') && $result['user_row']['user_type'] != USER_FOUNDER)
  14.                {
  15.                    return;
  16.                }
  17.                $redirect = $_SERVER['HTTP_REFERER']; // te dwa wiersze wstawilem
  18.                      header('Location: '.$redirect.'');
  19.                //meta_refresh(0, $redirect); ---->zmiana
  20.                trigger_error($message . '
  21.    
  22.    ' . sprintf($l_redirect, '<a href="' . $redirect . '">', '</a>'));
  23.            }
  24. ?>


Pozdrawiam
KCG
Można rzeźbić, a można poczytać na phpbb.com i zrobić wszystko prościej smile.gif
Tylko teraz mam inne problemy, z autowylogowywaniem, poruszane w innym wątku ;/
Draz
Dodanie 2 wierszy jest rzeźbieniem?
zastosowana wcześniej funkcja meta_refresh(0, $redirect); dodaje znacznik meta do strony logowania i dopiero po jej załadowaniu przekierowuje.
W każdym razie zastosowanie tego pozwala na natychmiastowy powrót na stronę z której się zalogowano.
W przypadku umieszczenia formularza logowania w nagłówku strony rozwiązanie takie pozwala na szybkie zalogowanie i powrót na stronę np. czytanego artykułu.
KCG
Można, ale moim zdaniem nie warto ingerować w pliki forum, skoro logowanie to:
  1. <?php
  2. $auth->login($username, $password, $remember, 1, 0);
  3. ?>

Więcej tutaj http://www.phpbb.com/kb/article/phpbb3-cro...ns-integration/ . Nie wymądrzam się, tylko przekazuję doświadczenie winksmiley.jpg
Draz
Szperałem dalej i:
funkcja login() - jak można się domyślać loguje do systemu; używa przy okazji funkcji login_db(). Jak logowanie się nie udaje zwraca info o błędach zapisane w tablicy np:
Kod
return array(
         'status'        => 'LOGIN_ERROR_PASSWORD',
         'error_msg'        =>'LOGIN_ERROR_PASSWORD',        
         'user_row'        => $row,
);

żeby to info wydobyć i obsłużyć trzeba użyć np. login_box()

Jak dla mnie nie ma łatwiejszej opcji szybkiego zalogowania na stronę bez przechodzenia przez stronę forum.
Jak coś znajdziesz to napisz, czekam na rozwiązanie.
KCG
Cytat(Draz @ 13.02.2009, 17:01:42 ) *
Jak dla mnie nie ma łatwiejszej opcji szybkiego zalogowania na stronę bez przechodzenia przez stronę forum.
Jak coś znajdziesz to napisz, czekam na rozwiązanie.

Napisałem post wyżej.
Draz
To może wytłumaczę o co mi chodzi:
- użytkownik loguje się do systemu, mamy kilka opcji - logowanie powiodło się lub wpisał złe hasło albo login.

- pozostawiając przy Twoim rozwiązaniu w przypadku pomyślnego zalogowania jest super, powiedzmy że dodajesz do tego przekierowanie i jesteś tam skąd się logowałeś

- ale co kiedy wpisałeś złe dane? funkcja login() zwraca ci błędy, ale trzeba jeszcze je obsłużyć, aby użytkownik wiedział co jest nie tak. W efekcie, albo piszesz własny kod obsługujący błędy i omawiane w tym temacie przekierowania, albo modyfikujesz już istniejącą funkcję login_box()
wg. mnie łatwiejsza i szybsza jest 2 opcja
KCG
Jeśli po tym, co napisałem użytkownik nie jest zalogowany, tzn. że podał błędne dane, ot obsługa błędów.
Może faktycznie ta funkcja jest dla Ciebie lepsza, ale z ciekawości jakie jeszcze chcesz błędy obsługiwać? Może coś przeoczyłem.
Draz
Masz rację, wystarczy wypisać - wystąpił błąd podczas logowania... to zależy jakie rozwiązanie pasuje do danego projektu.
A błędy które ja chce obsługiwać, dam przykład: jeżeli forum jest zintegrowane ze stroną np wydawnictwa i loginem jest numer prenumeraty, a hasło jest wybierane przez użytkownika - jako użytkownik chciałbym wiedzieć czy podczas błędnego logowania:
a. mojego loginu czyli numeru prenumeraty nie ma jeszcze w bazie, lub numer prenumeraty wygasł (program wypisuje odpowiedni komunikat - w tym przypadku kontaktuje się z wydawnictwem)
b. mój login jest w bazie, ale wpisałem złe hasło (komunikat - nie pamiętasz hasła? - przejdź na zakładkę przypomnij hasło - w tym przypadku oszczędzamy sobie x maili od użytkowników, którzy myślą że ich numer prenumeraty został skasowany).
KCG
Masz rację, ja aż takich możliwości aktualnie nie potrzebuję smile.gif
gigilio
a jeśli nie działa wogóle funkcja redirect??
KCG
Co to znaczy nie działa, jaką masz wersję phpbb? Dobrze używasz funkcji?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.