Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] integracja logowania strony z forum phpBB3 - ROZWIĄZANE, a dokładniej przekierowanie;)
KCG
post
Post #1





Grupa: Zarejestrowani
Postów: 449
Pomógł: 4
Dołączył: 1.12.2006

Ostrzeżenie: (0%)
-----


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ć? (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)

Sam doszedłem (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Ew. jakby ktoś wiedział, jak zrobić, aby bezpośrednio przekierował (jakby używając header('Location: ...')) byłbym wdzięczny (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) </a href=\"' . append_sid(\"{$phpbb_root_path}index.$phpex\") . '\"></br ></br >

Ten post edytował KCG 2.01.2008, 17:03:01
Go to the top of the page
+Quote Post
Draz
post
Post #2





Grupa: Zarejestrowani
Postów: 7
Pomógł: 1
Dołączył: 11.02.2009

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
KCG
post
Post #3





Grupa: Zarejestrowani
Postów: 449
Pomógł: 4
Dołączył: 1.12.2006

Ostrzeżenie: (0%)
-----


Można rzeźbić, a można poczytać na phpbb.com i zrobić wszystko prościej (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Tylko teraz mam inne problemy, z autowylogowywaniem, poruszane w innym wątku ;/
Go to the top of the page
+Quote Post
Draz
post
Post #4





Grupa: Zarejestrowani
Postów: 7
Pomógł: 1
Dołączył: 11.02.2009

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
KCG
post
Post #5





Grupa: Zarejestrowani
Postów: 449
Pomógł: 4
Dołączył: 1.12.2006

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Draz
post
Post #6





Grupa: Zarejestrowani
Postów: 7
Pomógł: 1
Dołączył: 11.02.2009

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Draz 13.02.2009, 17:02:47
Go to the top of the page
+Quote Post
KCG
post
Post #7





Grupa: Zarejestrowani
Postów: 449
Pomógł: 4
Dołączył: 1.12.2006

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Draz
post
Post #8





Grupa: Zarejestrowani
Postów: 7
Pomógł: 1
Dołączył: 11.02.2009

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
KCG
post
Post #9





Grupa: Zarejestrowani
Postów: 449
Pomógł: 4
Dołączył: 1.12.2006

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Draz
post
Post #10





Grupa: Zarejestrowani
Postów: 7
Pomógł: 1
Dołączył: 11.02.2009

Ostrzeżenie: (0%)
-----


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).

Ten post edytował Draz 15.02.2009, 08:59:58
Go to the top of the page
+Quote Post
KCG
post
Post #11





Grupa: Zarejestrowani
Postów: 449
Pomógł: 4
Dołączył: 1.12.2006

Ostrzeżenie: (0%)
-----


Masz rację, ja aż takich możliwości aktualnie nie potrzebuję (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
gigilio
post
Post #12





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 1.08.2009

Ostrzeżenie: (0%)
-----


a jeśli nie działa wogóle funkcja redirect??
Go to the top of the page
+Quote Post
KCG
post
Post #13





Grupa: Zarejestrowani
Postów: 449
Pomógł: 4
Dołączył: 1.12.2006

Ostrzeżenie: (0%)
-----


Co to znaczy nie działa, jaką masz wersję phpbb? Dobrze używasz funkcji?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 14:39