Empfehlungen: Erweiterte Suche

[gelöst] authError bei jedem Login

Klassen zur Datenverarbeitung in den Controllern (DRY)

[gelöst] authError bei jedem Login

Beitragvon muckelpih » Mi 1. Feb 2012, 10:49

Hallo zusammen,

ich habe ein Problem und komme damit nicht wirklich weiter. Ich habe für meine kleine Webanwendung mit der Auth-Klasse einen Login realisiert. Dieser klappt auch wunderbar. Ich habe jedoch folgendes Problem (dazu muss ich etwas ausholen):

- Die Webseite liegt auf einem lokalen Webserver (192.168.178.20) und dort im Ordner support.
- Sobald ich im Browser 192.168.178.20/support aufrufe und keine Session aktiv ist, wird der Benutzer auf 192.168.178.20/support/login weitergeleitet.
- Dort gibt der Benutzer dann seine Login-Daten ein und loggt sich ein. Beim ersten Login wird die Startseite aufgerufen und ein authError ausgelöst und das obwohl der Benutzer angemeldet werden konnte. Loggt der Benutzer sich aus wird er direkt wieder auf die Login-Seite geleitet. Meldet er sich dann erneut an funktioniert der Login ohne Fehler. Der Login funktioniert auch problemlos, wenn der Benutzer direkt die Login-Seite (192.168.178.20/support) aufruft. Das Problem besteht also nur, wenn die Webanwendung über 192.168.178.20/support aufgerufen wird.

Hier mal mein Code meiner login und logout-action
Code: Alles auswählen
App::uses('AppController', 'Controller');

class UsersController extends AppController {
   
    public function beforeFilter() {
        parent::beforeFilter();
    }
   
    public function login(){
        //Setze anderes Layout
        $this->layout = 'login';
        if ($this->request->is('post')) {
            if ($this->Auth->login()) {
                $this->User->id = $this->Auth->user('id');
                $this->User->saveField('lastlogin', date("Y-m-d H:i:s"));
                $this->redirect($this->Auth->redirect());  
            } else {
                //Passwort-Feld leeren und Fehler ausgeben
                $this->request->data['User']['password'] = "";
                $this->Session->setFlash('Benutername und/oder Passwort falsch');

            }
        }
    }
   
    public function logout(){
        $this->Session->setFlash('Sie wurden erfolgreich ausgeloggt', 'default', array('class' => 'success'));
        $this->redirect($this->Auth->logout());
    }    
   


Und hier der Code meiner AppController-Klasse, in der ich die AuthComponent eingebunden habe:
Code: Alles auswählen
class AppController extends Controller {
   
    public $components = array('Session', 'Auth');
   
    public function beforeFilter(){
       
       $this->Auth->loginAction = array('controller'=>'users', 'action'=>'login');
       $this->Auth->loginRedirect = array('controller'=>'institutes', 'action'=>'index');
       $this->Auth->logoutRedirect = array('controller'=>'users', 'action'=>'login');
       $this->Auth->authorize = array('Controller');
       $this->Auth->authError = "Ihre Benutzerrechte sind nicht ausreichend um diese Operation durchzuführen";
       
       $this->Session->write('User.id', $this->Auth->user('id'));
       $this->Session->write('User.group', $this->Auth->user('group'));
       
    }
 


Habt ihr irgendeine Tipp für mich um den Fehler zu finden? Kann ich irgendwie sehen, warum oder wo der authError ausgelöst wurde? Ich bin mit meinem Latein am Ende :-(

Danke für Eure Hilfe
muckelpih
 
Beiträge: 11
Registriert: Do 26. Jan 2012, 17:38

Re: authError bei jedem Login

Beitragvon euromark » Mi 1. Feb 2012, 12:36

sind die actions wie login() und logout() denn mittels $this->Auth->allow() pulblic gemacht? also so dass sie uneingeloggt aufgerufen werden können?
euromark
 
Beiträge: 642
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.x
OS: Windows

Re: authError bei jedem Login

Beitragvon muckelpih » Mi 1. Feb 2012, 12:58

euromark hat geschrieben:sind die actions wie login() und logout() denn mittels $this->Auth->allow() pulblic gemacht? also so dass sie uneingeloggt aufgerufen werden können?


Danke für Deinen Hinweis. Habe das allow() jetzt in die beforeFilter() Funktion des Users-Controllers gepackt. Leider klappt es immer noch nicht :(
muckelpih
 
Beiträge: 11
Registriert: Do 26. Jan 2012, 17:38

Re: authError bei jedem Login

Beitragvon euromark » Mi 1. Feb 2012, 13:39

also allow('login', 'logout') ?
euromark
 
Beiträge: 642
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.x
OS: Windows

Re: authError bei jedem Login

Beitragvon muckelpih » Mi 1. Feb 2012, 14:18

euromark hat geschrieben:also allow('login', 'logout') ?


Habe folgendes gemacht:

Code: Alles auswählen

App::uses('AppController', 'Controller');

class UsersController extends AppController {
   
    public function beforeFilter() {
        parent::beforeFilter();
       
        //Aufruf von Login und Logout für alle erlauben
        $this->Auth->allow('login', 'logout');
    }
   
    public function login(){
        //Setze anderes Layout
        $this->layout = 'login';
        if ($this->request->is('post')) {
            if ($this->Auth->login()) {
                $this->User->id = $this->Auth->user('id');
                $this->User->saveField('lastlogin', date("Y-m-d H:i:s"));
                $this->redirect($this->Auth->redirect());  
            } else {
                //Passwort-Feld leeren und Fehler ausgeben
                $this->request->data['User']['password'] = "";
                $this->Session->setFlash('Benutername und/oder Passwort falsch');

            }
        }
    }
   
    public function logout(){
        $this->Session->setFlash('Sie wurden erfolgreich ausgeloggt', 'default', array('class' => 'success'));
        $this->redirect($this->Auth->logout());
    }


Das ist doch richtig oder? In der Vaterklasse kann ich das ja nicht hinterlegen, oder?
muckelpih
 
Beiträge: 11
Registriert: Do 26. Jan 2012, 17:38

Re: authError bei jedem Login

Beitragvon euromark » Mi 1. Feb 2012, 16:16

naja, die startseite selbst (wo auch immer die liegt) muss auch zwingend allowed sein! :)
euromark
 
Beiträge: 642
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.x
OS: Windows

Re: authError bei jedem Login

Beitragvon muckelpih » Mi 1. Feb 2012, 16:24

Sry. Bin noch relativ neu in der CakePHP-Welt. Aber was meinst Du mit Startseite? Ich habe in der app/config/routes.php folgendes eingetragen:

Code: Alles auswählen
Router::connect('/', array('controller' => 'institutes', 'action' => 'index'));


Also jeder Aufruf von 192.168.178.20/support wird dann an die index-action des institutes-Controller weitergegeben. Diese Weiterleitung erfolgt jedoch nur wenn der Benutzer angemeldet ist. Wenn der Benutzer angemeldet ist, wird dieser ja durch die AuthComponent an die login-Action weitergeleitet. Was muss ich denn da noch als Startseite freigeben? :?:

edit: Ich verwende für den Login eine eigenes Template (login.ctp). In diesem hatte ich vergessen die auth->flash-Messages anzuzeigen. Diese habe ich jetzt eingebunden. Ich bekomme nun den authError schon auf der Login-Seite angezeigt. Das Problem ist also irgendwie dort entstanden...
Zuletzt geändert von muckelpih am Mi 1. Feb 2012, 17:05, insgesamt 1-mal geändert.
muckelpih
 
Beiträge: 11
Registriert: Do 26. Jan 2012, 17:38

Re: authError bei jedem Login

Beitragvon euromark » Mi 1. Feb 2012, 16:58

welche cake version benutzt du?
weil da mal ein bug beim redirect war - oder ne etwas ungünstige lösung eher
vielleicht ist das ja in 2.x behoben
euromark
 
Beiträge: 642
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.x
OS: Windows

Re: authError bei jedem Login

Beitragvon muckelpih » Mi 1. Feb 2012, 17:06

euromark hat geschrieben:welche cake version benutzt du?
weil da mal ein bug beim redirect war - oder ne etwas ungünstige lösung eher
vielleicht ist das ja in 2.x behoben


Hey, nutze Version 2.0.5. Habe meinen Beitrag oben gerade editiert. Vielleicht hilft Dir das dabei mir zu helfen :D

Danke Dir vielmals
muckelpih
 
Beiträge: 11
Registriert: Do 26. Jan 2012, 17:38

Re: authError bei jedem Login

Beitragvon muckelpih » Mi 1. Feb 2012, 21:25

Pling. Der Groschen ist gefallen. Manchmal sieht man den Wald vor lauter Bäumen nicht :lol: :lol: Habe das Problem lösen können.

Lösung: Beim Aufruf der Seite 192.168.178.20/support wird wegen einem Eintrag in der route.php auf einen geschützten Bereich verwiesen. Erst danach wird dann die Login-Seite geladen. Da ist der Fehler aber schon aufgetreten. Habe jetzt den '/' Eintrag auf die Login-Action verweisen lassen und prüfe in dieser ob der Benutzer schon eingeloggt ist. Wenn dem so ist, gibt's einen reload auf die entsprechende Startseite. Ansonsten muss er sich halt einloggen.

Nochmals vielen Dank
muckelpih
 
Beiträge: 11
Registriert: Do 26. Jan 2012, 17:38


Zurück zu Components

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast