| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
| Autor |
Nachricht |
Ernstmacher Neuer User
Anmeldungsdatum: 13.07.2006 Beiträge: 14
|
13.07.2006 10:10 Kombination Auth und QF |
|
|
Hallo Leute,
da ich in eurem Forum schon so viele gute Sachen gefunden habe, die mir geholfen haben, habe ich mich nun auch angemeldet und wollte euch mal etwas zurückgeben.
Ich hatte immer Probleme mit der Kombination von Quickform und Auth, leider gab es nirgendswo passenden Lösungen, weswegen ich eine eigene gemacht habe.
Das Problem bei dieser Kombination ist meistens, dass man nicht erkennt, ob der Login erfolgreich war oder nicht. Und falls er nicht erfolgreich war bekam man meistens keine Anzeige in Quickform, da man erst nach dem das Formular abgeschickt wurde ($form->validate()) kontrollieren konnte, ob der Login erfolgreich war oder nicht.
Dieses Problem behebt man am besten mit einer eigenen Regel:
datei.php
| PHP: | <?
include('functions.php');
include('lang.php');
require_once "Auth.php";
require_once 'HTML/QuickForm.php';
$params = array(
"dsn" => $dsn,
"table" => "user",
"usernamecol" => "login",
"passwordcol" => "password"
);
$auth = new Auth("DB", $params, "loginForm");
global $auth;
$auth->start();
if($_GET['page'] == "logout" && $auth->getAuth())
{
$auth->logout();
$auth->start();
}
if ($auth->getAuth()) {
setTitle("Login");
addContent("You have been authenticated successfully.");
}
?> |
functions.php
| PHP: | <?
/**
* Displays the login form
*
* @access public
* @return void
*/
function loginForm()
{
global $_lang;
$form = new HTML_QuickForm('loginForm', null,"",null, null, true);
//Elements
$form->addElement('header', 'header', $_lang['standard']['login']['header']);
$form->addElement('text', 'username', $_lang['standard']['login']['input_username'].':', array('style' => 'width: 300px;','autocomplete'=>'off'));
$form->addElement('password', 'password', $_lang['standard']['login']['input_pwd'].':', array('style' => 'width: 300px;','autocomplete'=>'off'));
$form->addElement('submit', 'submit', $_lang['standard']['login']['input_submit'].'');
//Rules
$form->addRule('username', $_lang['standard']['login']['error_username_1'], 'required', null, 'client');
$form->addRule('username', $_lang['standard']['login']['error_username_2'], 'email', null, 'client');
$form->addRule('password', $_lang['standard']['login']['error_pwd'], 'required', null, 'client');
//New rules
$form->registerRule('controlLogin', 'function', 'controlLogin');
$form->addRule('password', $_lang['standard']['login']['error_login'], 'callback', 'controlLogin');
//Constants
$form->setRequiredNote('<div class="requiredNote">'.$_lang['standard']['form']['requiredNote'].'</div><br />');
$form->setJsWarnings($_lang['standard']['form']['js_pref'],$_lang['standard']['form']['js_post']);
//Filtering data
$form->applyFilter('__ALL__','trim');
$form->applyFilter('__ALL__','strip_tags');
$content = "";
if ($form->isSubmitted() && $form->validate()) {
$form->freeze();
}
$content .= $form->toHtml();
//Set content
addContent($content);
}
/**
* controls if the User is logged in
*
* @access public
* @return bool
*/
function controlLogin()
{
global $auth;
//if $aut->getauth returns true the user is logged in; so his password must be right
if($auth->getauth())
{
return true;
}
//or he has entered some wrong data
return false;
}
?> |
Mit der Regel controlLogin wird einfach überprüft, ob der User schon eingeloggt ist. Dies geschieht mit $auth->getauth(). Falls der User nicht nicht eingeloggt ist, muss dementsprechend der Loginname oder das Passwort falsch sein. Die Feldbezeichnungen, Fehlermeldungen, etc. haben ich $_lang abgespeichert, da dieses Projekt mehrsprachig ist.
Ich denke, dass ist eine sehr gute und einfache Lösung und hoffe, dass ich einigen weiterhelfen konnte.
Die "alten Hasen" frage ich, was ihr von dieser Lösung haltet.
Mfg Ernstmacher
Zuletzt bearbeitet von Ernstmacher am 13.07.2006 12:21, insgesamt einmal bearbeitet |
|
| Nach oben |
|
 |
MaGdev Site Admin

Anmeldungsdatum: 04.02.2004 Beiträge: 715 Wohnort: Hamburg
|
13.07.2006 12:01 |
|
|
Sieht ganz gut aus....
allerdings ein kleiner Tip für kürzeren Code:
$auth->getAuth() gibt schon einen bool´schen Wert zurück. Die Kurzform deiner Regel wäre dann:
| PHP: | <?php function controlLogin()
{
global $auth;
return $auth->getAuth();
}
?> |
Ich schubs den Beitrag mal in die Tutorials...
Grüße,
Marco _________________ Auch der längste Weg beginnt immer mit einem kleinem Schritt!
Vorgehen bei Problemen:
1. PHP-Handbuch oder PEAR-Handbuch lesen!
2. Forensuche benutzen!
3. Fragen posten und dabei die Regeln beachten! |
|
| Nach oben |
|
 |
jascha User
Anmeldungsdatum: 13.11.2006 Beiträge: 33
|
13.11.2006 13:41 |
|
|
Hallo,
ich fand die Idee sehr schön Auth und QuickForm zu kombinieren. Leider steigt er bei mir immer aus bei addContent($content); in functions.php mit der Fehlermeldung Call to undefined function: addcontent(). Für jeden Tip bin ich sehr dankbar.
Mfg Jascha Schöllner |
|
| Nach oben |
|
 |
Berdir Power User
Anmeldungsdatum: 22.09.2005 Beiträge: 1347
|
13.11.2006 13:52 |
|
|
addContents() sieht mir stark nach etwas eigenem aus. Versuch doch einmal, diese Zeile durch ein einfaches "echo $content;" zu ersetzen.
Wenn du siehst das es klappt, kannst du es ja dann immer noch besser in deine Anwendung einbauen (z.B. in dein Template einfügen) |
|
| Nach oben |
|
 |
|
|
|
Zu Deinen Favoriten hinzufügen
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum nicht posten Du kannst Dateien in diesem Forum herunterladen
|
|