Skocz do zawartości
"Idzie nowe..." - o zmianach i nie tylko ×
Przeniesienie zakupów z IPS Marketplace / Moving bought items from IPS Marketplace ×

Logowanie użytkowników na tym samym serwerze [IPS 4.5]


colin503

Rekomendowane odpowiedzi

Witam,

 

Posiadam IPS w wersji 4.5.4, forum jest zainstalowane na serwerze w katalogu "forum" i chciałbym na naszej głównej stronie (znajdującej się w głównym katalogu serwera) przeprowadzić logowanie użytkowników.

Jeśli zaloguję się na forum, a na naszej stronie uruchomię poniższy kod, to wyświetla id i nazwę zalogowanego użytkownika:

 

require_once('/forum/init.php');
\IPS\Session\Front::i();

if(\IPS\Member::loggedIn()->member_id)
{
	$uzytkownik_id = \IPS\Member::loggedIn()->member_id;
	$uzytkownik_nick = \IPS\Member::loggedIn()->name;
}

echo $uzytkownik_id." - ".$uzytkownik_nick;

 

Problem mam z zalogowaniem, gdyż niestety wykonanie poniższego kodu skutkuje błędem 500 i nie ma jego opisu, co konkretnie jest źle :(

 

require_once('/forum/init.php');
\IPS\Session\Front::i();

if($_POST['username'] && $_POST['password'])
{
	$IPSLogin = new \IPS\Login\Internal;
	$IPSLogin->init();
		
	$member = $IPSLogin->authenticate(array('auth' => $_POST['username'], 'password' => $_POST['password']));
}


Przejrzałem dokumentację, forum Invision Community oraz szukałem w Internecie, niestety nie umiem sobie z tym poradzić :(

Wydaje mi się, że powinienem skorzystać z tego mechanizmu, ale też nie chce mi działać...

https://invisioncommunity.com/developers/docs/members-authentication/login-methods/creating-a-usernamepassword-handler-r174/

 

Proszę o radę, jak podejść do tematu, czy może trzeba coś ustawić w panelu administracyjnym?

Edytowane przez colin503
Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager
55 minut temu, Sevu napisał:

Masz coś w błędach htaccess i dlatego ci wywala ;)

W czym? Gdzie są te błędy?

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Odnośnik do komentarza
Udostępnij na innych stronach

Błąd jest ogólny (jak na załączonym screenie), bez szczegółów. Szukałem w adminie i w folderze forum jakichś logów z błędami, ale nic nie znalazłem.

Co do błędów w pliku .htaccess to może chodzić o mój .htaccess do głównej strony (znajduje się w głównym folderze serwera), czy o plik .htaccess forum (folder /forum)?

Inna sprawa to sposób logowania, który zmienił się wraz z pojawieniem się wersji 4.3 forum. Czy moje skrypty są poprawne?

ips-forum-logowanie-blad.jpg

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager
W dniu 23.10.2020 o 16:38, DawPi napisał:

może w logach błędów serwera coś jest?

Zapytaj admina serwera.

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

Zapisuje swoje błędy, a nie serwera. Nie wiem co się tak wzbraniasz przed kontaktem z serwerownią. 

  • Lubię to 1

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Odnośnik do komentarza
Udostępnij na innych stronach

core_error_logs jest pusta a w core_logs znalazłem taki wpis:

 

- w polu message

Error: Call to undefined method IPS\Member::encryptedPassword() (0)
#0 /abc/logowanie1.php(10): IPS\Login\_Internal->authenticate(Array)
#1 {main}

 

- w polu backtrace

#0 /forum/init.php(995): IPS\_Log::log('Error: Call to ...', 'uncaught_except...')
#1 [internal function]: IPS\IPS::exceptionHandler(Object(Error))
#2 {main}

 

@DawPi nie wzbraniam się, tylko jestem w 99% pewny, że to wina skryptu logowania. Od wersji 4.3 coś zmienili w tej kwestii, a niestety nie umiem dojść do tego, jak ten kod teraz powinien wyglądać :(

Edytowane przez colin503
Odnośnik do komentarza
Udostępnij na innych stronach

  • DawPi zmienił(a) tytuł na Logowanie użytkowników na tym samym serwerze [IPS 4.5]
  • Manager
3 godziny temu, colin503 napisał:

Error: Call to undefined method IPS\Member::encryptedPassword() (0)

I to błąd powiedzmy z teraz jak próbujesz wywołać ten kod z pierwszego postu?

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

Masz całe, oczywiście zmieniłem POST na GET do testów:

<?php 
require_once('C:/wamp/www/45/init.php');
\IPS\Session\Front::i();

if($_GET['username'] && $_GET['password'])
{
	$login = new \IPS\Login();
			
	foreach ( $login->usernamePasswordMethods() as $method )
	{
		try
		{
			$member = $method->authenticateUsernamePassword( $login, $_GET['username'],  $_GET['password'] );
			\IPS\Login::checkIfAccountIsLocked( $member, TRUE );
            break;
		}
		catch( \Exception $e )
        {
        }
	}
}

if( isset( $member->member_id ) )
{
    echo $member->member_id." - ".$member->name;
}

Działa:

obraz.png

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Odnośnik do komentarza
Udostępnij na innych stronach

Dziękuję, identyfikacja działa, lecz nie zapisuje sesji, gdyż po wywołaniu Twojego skryptu:

  • na forum nadal jestem niezalogowany
  • ciasteczko ips4_IPSSessionFront jest nieuaktualnione (posiada datę z mojego ostatniego logowania na forum)
  • poniższa funkcja nie zwraca ID użytkownika (nie posiada żadnej wartości)
\IPS\Member::loggedIn()->member_id

 

Co trzeba dodać, żeby tworzył sesję?

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

Dokładnie. ;)

 

<?php 
require_once('C:/wamp/www/45/init.php');
\IPS\Session\Front::i();

if($_GET['username'] && $_GET['password'])
{
	$login = new \IPS\Login();
			
	foreach ( $login->usernamePasswordMethods() as $method )
	{
		try
		{
			$member = $method->authenticateUsernamePassword( $login, $_GET['username'],  $_GET['password'] );
			\IPS\Login::checkIfAccountIsLocked( $member, TRUE );
            \IPS\Session::i()->setMember( $member );
            break;
		}
		catch( \Exception $e )
        {
        }
	}
}

if( isset( $member->member_id ) )
{
    echo $member->member_id." - ".$member->name;
}

 

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Odnośnik do komentarza
Udostępnij na innych stronach

Kolejny krok do przodu. W skrócie:

  • na forum nadal jestem niezalogowany - i tak i nie, jak odżswieżę stronę główną forum to nadal jestem niezalogowany, ale jak wejdę w jakąkolwiek inną podstronę to już jest ok - jestem zalogowany, lecz po przejściu na główną stronę nadal brak zalogowania (żeby nie było, nie cofam się tylko klikam w link, który wczytuje całą stronę na świeżo)
  • ciasteczko ips4_IPSSessionFront jest nieuaktualnione (posiada datę z mojego ostatniego logowania na forum) - pomogło (data jest już aktualna)
  • poniższa funkcja nie zwraca ID użytkownika (nie posiada żadnej wartości) - pomogło

PS. Czy jest gdzieś jakiś dokładny manual z wszystkimi możliwymi poleceniami?

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.