Vlastní přihlašování a odhlašování i v phpBB

19. Prosinec 2008

Náš cíl je mít jedno uživatelské jméno a heslo pro stránky a zároveň pro phpBB. Formulář pro přihlašování bude na každé stránce webu a chceme se přihlašovat přes vlastní formulář = bez nutnosti navštívit fórum. V jiném článku se můžete dočíst o vlastní registraci i do phpBB.

Příhlášení

Pro přihlášení potřebujeme přihlašovací formulář:

<form action="./forum/ucp.php?mode=login" method="post"><div>
Uživatelské jméno: <input name="username" type="text" />
Heslo: <input name="password" type="password" />
<input name="redirect" type="hidden" value="..<?=$_SERVER['PHP_SELF']?>” >
<input name=”login” type=”submit” value=”Přihlásit” /></div>
</form>

Upravte si správně cestu k souboru ucp.php a hodnotu pole redirect abyste se po zalogování vrátili na původní stránku. (Uvidíte stránku fóra na pár vteřin, řešení viz níže)

Je návštěvník přihlášený?

První možnost:

if(isset($user->data['is_registered']) && $user->data['is_registered']){
// je přihlášený
}else{
// není přihlášený
}

Druhá možnost:

if($user->data['username'] != “Anonymous”){
// je přihlášený
}else{
// není přihlášený
}

V případě, že je uživatel přihlášen, může se nám hodit uživatelovo id pro výběr dalších informací z jiné tabulky v databázi:

$user->data['user_id'];

Případně další informace: Obsah proměnné $user->data v phpBB

Odhlášení

Pro odhlášení stačí zavolat tyto dvě funkce:

$user->session_kill();
$user->session_begin();

Vylepšení přihlašování

Nejprve je dobré vyhnout se několika vteřinám po zalogování strávených na stránce fóra. Chceme tedy abychom po vyplnění formuláře ihned byly zpět na té samé stránce.

V souboru functions.php (/forum/includes/functions.php) najděte funkci login_box() (v mé verzi to je řádek 2425) a tam najděte a vymažte nebo dejte do komentáře řádek, kde se volá funkce meta_refresh():

$redirect = meta_refresh(3, $redirect);

Na toto místo přidejte tento řádek kódu:

$redirect = redirect($redirect);

Celkově to tedy bude vypadat asi takto:

$redirect = redirect($redirect); // nove
//vymazano: $redirect = meta_refresh(3, $redirect);

V případě špatného zadání jména nebo hesla musíme vyřešit oznámení chyby. Přidáme celou větev else

if ($result['status'] == LOGIN_SUCCESS)
{
// zde jsme upravovali kód
}
else
{
$redirect = redirect($redirect.’?err=’.$result['error_msg']); // nove
}

Zde se rovnou také přesměrováváme na původní soubor současně také souboru posíláme, co se stalo za chybu a můžeme tak tedy vypsat chybovou zprávu. Například takto:

switch ($_REQUEST["err"]) {
case “LOGIN_ERROR_USERNAME”: echo “Bylo zadáno špatné uživatelské jméno!”; break;
case “LOGIN_ERROR_PASSWORD”: echo “Bylo zadáno špatné heslo!”; break;
case “NO_PASSWORD_SUPPLIED”: echo “Zadejte heslo!”; break;
}

Pokud je přihlášení neúspěšné přesměrování se v tomto příkladě provede vždy na náš přihlašovací soubor. Šlo by například do přihlašovacího formuláře přidat další skrytou hodnotu, podle které bychom poznali, že soubor ucp.php voláme my a ne phpBB. Záleží samozřejmě na konkrétní potřebě…

Další čtení:

Rubriky: phpBB | Štítky: ,

Napsat komentář