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

Sprawdzanie zalogowanego użytkownika


piernik

Rekomendowane odpowiedzi

Integruję stronę z forum. W poprzedniej wersji korzystałem z ipbwi - póki co nie obsługuje jeszcze ipb3.0

Poprzednio miałem to tak zrobione: w nagłówku swojej strony dałem swój formularz logowania i wywaliłem formularz logowania z forum.

W kodzie php sprawdzałem czy użytkownik jest zalogowany na forum.

Jeżeli ktoś się logował to własną funkcją wywoływałem funkcję odpowiedzialną za logowanie na forum i później znów sprawdzałem czy jest zalogowany na forum - tym sposobem korzystałem tylko z sesji i ciasteczek z forum ipb - nie musiałem martwić się że użytkownik będzie np zalogowany na forum, ale nie u mnie.

W nowej wersji forum mam już logowanie () ale nie wiem jak sprawdzić czy użytkownik jest zalogowany.

Jest pewno za to odpowiedzialna zmienna member w klasie han_login, ale jest ona protected więc nie mam do niej dostępu.

Jak wyciągnąć tą informację?

Jeżeli chodzi o wylogowanie to pewno za to jest odpowiedzialna funkcja logoutCallback(), tak?

Edit:

Jednak nawet logowanie nie działa. Loguje ale nie pamięta o ty i np jak się zaloguję na stronie i wejdę na forum to o tym nie wie :|

Mój kod php

<?php
require_once('config.inc.php');

class IPBWI {
public $login;

public function __construct() {
	global $config;
	//-----------------------------------------
	// Edit this: path to the forum directory
	//-----------------------------------------
	$forum_path = 'forum/';
	//echo $forum_path;
	/**
	 * We will change directories so that proper directory is picked up
	 */
	chdir( $forum_path );

	/**
	 * Get some basic IPB files
	 */
	$forum_path='';
	define( 'IPB_THIS_SCRIPT', 'public' );
	require_once( $forum_path . 'initdata.php' );

	/**
	 * Get IPB registry
	 */
	require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' );
	$this->ipbRegistry    = ipsRegistry::instance();
	$this->ipbRegistry->init();

	/**
	 * Get login handler
	 */
	require_once( IPS_ROOT_PATH . 'sources/handlers/han_login.php' );
	$this->login  = new han_login( $this->ipbRegistry );
	$this->login->init();
	chdir("../");
	//echo $this->ipbRegistry->member;
}

public function isLoggedIn() {
	//print_pre($this->login->member_data);
	if ($this->login->member_data['member_id']) return true;
	else return false;
}

public function login($email,$password) {
	if( $this->login->loginAuthenticate( $email, $email, $password ) ) {
		//print_r($this->login->member_data);
		return true;
	} else {
        return false;
	}
}

public function logout() {
	$this->login->logoutCallback();
}
}
?>

Edit2:

Z logowaniem poradziłem sobie w inny sposób - zmieniłem formularz na taki z parametrami z forum...

Teraz został problem tylko z wykrywaniem czy uzytkownik jest zalogowany w danym momencie czy nie...

Jakieś pomysły?

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

Hej,

na razie to pokazałeś kod klasy. Pokaż jak ją wykorzystujesz.

Dobra chyba sobie ze wszystkim poradziłem...

Logowanie:

Stworzyłem podobny formularz jak jest na forum czyli action=forum/index.php?app=core&module=global&section=login&do=process

pole redirect i działa.

Sprawdzanie czy jest zalogowany:

Za każdym wywołaniem podstrony wywołuje metodę isLoggedIn() z przez siebie napisanej klasy:

<?php
require_once('config.inc.php');

class IPBWI {
public $dane_uzytkownika;

public function __construct() {
	global $config;
	//-----------------------------------------
	// Edit this: path to the forum directory
	//-----------------------------------------
	$forum_path = 'forum/';
	//echo $forum_path;
	/**
	 * We will change directories so that proper directory is picked up
	 */
	chdir( $forum_path );

	/**
	 * Get some basic IPB files
	 */
	$forum_path='';
	define( 'IPB_THIS_SCRIPT', 'public' );
	require_once( $forum_path . 'initdata.php' );

	/**
	 * Get IPB registry
	 */
	require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' );
	$this->ipbRegistry    = ipsRegistry::instance();
	$this->ipbRegistry->init();

	chdir("../");
}

public function isLoggedIn() {
	$user_ob=$this->ipbRegistry->member();
	$this->dane_uzytkownika['member_id']=$user_ob->member_id;
	$this->dane_uzytkownika['form_hash']=$user_ob->form_hash;
	if ($this->dane_uzytkownika['member_id']) return true;
	else return false;
}

}
?>

W funkcji tej pobiera informacje o zalogowanym użytkowniku wraz z form_hash, który będzie potrzebny do wylogowania

Wylogowanie:

Wywołuję adres strony:

forum/index.php?app=core&module=global&section=login&do=logout&k=form_hash_uzytkownika

Jedyny problem że po wylogowaniu przeładowuje na stronę główną forum, a nie portalu - można tutaj dodac jakiś parametr żeby wracał na stronę główną całego serwisu?

Mam nadzieję, że komuś się to przyda.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

Wraca na główną, ponieważ nie przekazano danych, gdzie ma logować.

Można to zakodować w pliku: sources/handlers/han_login.php [metoda logoutCallback()], a ja polecam:

post-1-1256297138,8255_thumb.png

post-1-1256297146,3399_thumb.png

I tam wpisać Twój adres, na który użytkownik zostanie przekierowany po wylogowaniu.

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

Wraca na główną, ponieważ nie przekazano danych, gdzie ma logować.

Można to zakodować w pliku: sources/handlers/han_login.php [metoda logoutCallback()], a ja polecam:

post-1-1256297138,8255_thumb.png

post-1-1256297146,3399_thumb.png

I tam wpisać Twój adres, na który użytkownik zostanie przekierowany po wylogowaniu.

To jest chyba adres na który użytkownik zostanie przekierowany przez właściwym wylogowaniem, bo jak coś tam wpiszę to nie wylogowuje... Chyba używane wówczas jak masz własny system wylogowywania z forum.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

Uhm, tak było w poprzedniej wersji bodajże.

Zatem w podanej wyżej metodzie zakoduj przekierowanie w pliku.

Kod:

$this->registry->getClass('output')->silentRedirect( $this->settings['base_url']."app=portal" );

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

Dziwne - przekierowuje dobrze, ale nie wylogowuje...

Tak zmieniłem funkcję:

public function logoutCallback()
 	{
 		$returns 	= array();
	$redirect	= "";

	foreach( $this->modules as $k => $obj_reference )
	{
		if( method_exists( $obj_reference, 'logoutCallback' ) )
		{
			$returns[] = $obj_reference->logoutCallback();
		}

		//-----------------------------------------
		// Grab first logout callback url found
		//-----------------------------------------

		if( !$redirect AND $this->login_methods[ $k ]['login_logout_url'] )
		{
			$redirect = $this->login_methods[ $k ]['login_logout_url'];
		}
 		}

	//-----------------------------------------
	// If we found a logout url, go to it now
	//-----------------------------------------
	$this->registry->getClass('output')->silentRedirect("http://localhost/superdomek/artykuly/");
	return $returns;
 		if( $redirect )
 		{
 			$this->registry->getClass('output')->silentRedirect( $redirect );
 		}

 		return $returns;
 	}

Edit:

on w całej funkcji nic nie robi - szuka tylko adresu do wylogowania - jak nie znajdzie zwraca puty ciąg. Nawet w tablicy returns nic nie ma.

Edytowane przez piernik
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ę.