PEAR-Forum.de Übersicht Thema anzeigen - Kombination Auth und QF

Kombination Auth und QF


 

PEAR-Forum.de Übersicht » HowTo´s, Tutorials, Codebeispiele und Wissenswertes
Neues Thema eröffnen Neue Antwort erstellen Diesen Beitrag ausdrucken
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Ernstmacher
Neuer User


Anmeldungsdatum: 13.07.2006
Beiträge: 14

Beitrag13.07.2006 10:10    Kombination Auth und QF Antworten mit Zitat

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,"",nullnulltrue);

    
//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
Benutzer-Profile anzeigen Private Nachricht senden
MaGdev
Site Admin


Anmeldungsdatum: 04.02.2004
Beiträge: 715
Wohnort: Hamburg

Beitrag13.07.2006 12:01     Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
jascha
User


Anmeldungsdatum: 13.11.2006
Beiträge: 33

Beitrag13.11.2006 13:41     Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Berdir
Power User


Anmeldungsdatum: 22.09.2005
Beiträge: 1347

Beitrag13.11.2006 13:52     Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden PEAR-User
Beiträge der letzten Zeit anzeigen:   
Diese Seite übersetzen
PEAR-Forum.de Übersicht » HowTo´s, Tutorials, Codebeispiele und Wissenswertes
Neues Thema eröffnen Neue Antwort erstellen Diesen Beitrag ausdrucken
   Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

Zu Deinen Favoriten hinzufügen

 
Gehe zu:  
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