Empfehlungen: Erweiterte Suche

loginRedirect() leitet erst nach 2. Login weiter

Klassen zur Datenverarbeitung in den Controllern (DRY)

loginRedirect() leitet erst nach 2. Login weiter

Beitragvon getit » Fr 23. Jan 2009, 10:38

Hallo,

ich versuche seit gestern ACLs umzusetzen.
Ich verwende das Buch "Webentwicklung mit CakePHP".

Ich habe in meinen AppController geschrieben:
Code: Alles auswählen

<?php
class AppController extends Controller {
    function beforeFilter() {
        $this->Auth->authorize = 'actions';
        $this->Auth->loginRedirect = array('controller' => 'jobs', 'action' => 'index');
    }
}
?>
 

Aber leider Funktioniert die Weiterleitung nicht richtig.

Gebe ich die URL
Code: Alles auswählen
localhost/cakejobs/jobs
ein, funktioniert alles wie gewünscht.

Gebe ich zb. die URL
Code: Alles auswählen
localhost/cakejobs/groups
ein, muss ich die Anmeldeprozedur 2x durchlaufen bevor ich weitergeleitet werde.
Also Username/Password eingeben, Login drücken und dann erscheint wieder die Loginmaske und erst nach weiterer Eingabe von Username/Password und Druck auf Login werde ich weitergeleitet.

Kann sich das jemand erklären?

:( Bin am Verzweifeln mit dem ACL.
HILFE!!!
getit
 
Beiträge: 105
Registriert: Mo 22. Dez 2008, 13:06
CakePHP-Version: 1.2.1.8004
OS: Vista

Re: loginRedirect() leitet erst nach 2. Login weiter

Beitragvon Mathias » So 25. Jan 2009, 15:51

So wirklich kann ich das Problem nicht lösen. Aber hier ein Gedanke: Wie leitest du denn weiter? Vielleicht kannst du mal deine login function posten.
cheers
Benutzeravatar
Mathias
 
Beiträge: 225
Registriert: Mi 4. Jun 2008, 22:30
Wohnort: Berlin
CakePHP-Version: 1.3.x
OS: OS X 10.6.x

Re: loginRedirect() leitet erst nach 2. Login weiter

Beitragvon getit » So 25. Jan 2009, 17:30

@Mathias
Danke für Deine Antwort.

Aber ich verstehe Deine Frage nicht so wirklich
Wie leitest du denn weiter?

Na so:
Code: Alles auswählen

<?php
class AppController extends Controller {
   function beforeFilter() {
      $this->Auth->authorize = 'actions';
      $this->Auth->loginRedirect = array('controller' => 'jobs', 'action' => 'index');
   }
}
?>
 

Über "loginRedirect".
getit
 
Beiträge: 105
Registriert: Mo 22. Dez 2008, 13:06
CakePHP-Version: 1.2.1.8004
OS: Vista

Re: loginRedirect() leitet erst nach 2. Login weiter

Beitragvon Mathias » So 25. Jan 2009, 20:40

Ich meine nicht den beforeFilter(), sondern die login-Funktion. Wahrscheinlich wirste die ja im users-controller haben.
cheers
Benutzeravatar
Mathias
 
Beiträge: 225
Registriert: Mi 4. Jun 2008, 22:30
Wohnort: Berlin
CakePHP-Version: 1.3.x
OS: OS X 10.6.x

Re: loginRedirect() leitet erst nach 2. Login weiter

Beitragvon getit » So 25. Jan 2009, 22:54

die login-Funktion

Das ist eine leere Funktion

Code: Alles auswählen

<?php
class UsersController extends AppController {

    var $name = 'Users';
    var $helpers = array('Html', 'Form');

    function index() {
        $this->User->recursive = 0;
        $this->set('users', $this->paginate());
    }
   
    function login() {
       
    }
   
    function logout() {
        $this->redirect($this->Auth->logout());
    }

    function view($id = null) {
        if (!$id) {
            $this->Session->setFlash(__('Invalid User.', true));
            $this->redirect(array('action'=>'index'));
        }
        $this->set('user', $this->User->read(null, $id));
    }

    function add() {
        if (!empty($this->data)) {
            $this->User->create();
            if ($this->User->save($this->data)) {
                $this->Session->setFlash(__('The User has been saved', true));
                $this->redirect(array('action'=>'index'));
            } else {
                $this->Session->setFlash(__('The User could not be saved. Please, try again.', true));
            }
        }
        $groups = $this->User->Group->find('list');
        $this->set(compact('groups'));
    }

    function edit($id = null) {
        if (!$id &amp;&amp; empty($this->data)) {
            $this->Session->setFlash(__('Invalid User', true));
            $this->redirect(array('action'=>'index'));
        }
        if (!empty($this->data)) {
            if ($this->User->save($this->data)) {
                $this->Session->setFlash(__('The User has been saved', true));
                $this->redirect(array('action'=>'index'));
            } else {
                $this->Session->setFlash(__('The User could not be saved. Please, try again.', true));
            }
        }
        if (empty($this->data)) {
            $this->data = $this->User->read(null, $id);
        }
        $groups = $this->User->Group->find('list');
        $this->set(compact('groups'));
    }

    function delete($id = null) {
        if (!$id) {
            $this->Session->setFlash(__('Invalid id for User', true));
            $this->redirect(array('action'=>'index'));
        }
        if ($this->User->del($id)) {
            $this->Session->setFlash(__('User deleted', true));
            $this->redirect(array('action'=>'index'));
        }
    }

}
?>
 

Und dann halt der View (/users/login.ctp) dazu
Code: Alles auswählen

<?php
echo $form->create('User', array('action' => 'login'));
echo $form->input('username');
echo $form->input('password');
echo $form->end('Login');
?>
 


und der aktualisierte AppController
Code: Alles auswählen

<?php
class AppController extends Controller {
    var $components = array('Security', 'Auth', 'Acl');
   
    function beforeFilter() {
        $this->Auth->loginAction = array(
            'controller'    =>  'users',
            'action'        =>  'login'
        );
        $this->Auth->authorize = 'actions';
        $this->Auth->loginRedirect = array(
            'controller'    =>  'jobs',
            'action'        =>  'index'
        );
    }
}
?>
 
getit
 
Beiträge: 105
Registriert: Mo 22. Dez 2008, 13:06
CakePHP-Version: 1.2.1.8004
OS: Vista

Re: loginRedirect() leitet erst nach 2. Login weiter

Beitragvon Mathias » Do 29. Jan 2009, 17:36

Hmm irgendwie versteh ich das nicht. Mag an ACL liegen, da ich es noch nie benutzt habe.
Wo passiert denn das Einloggen? Du verweist auf die login-action, die leer ist.

Sorry, dass ich dir jetzt nicht wirklich bei deinem Problem helfen kann.
cheers
Benutzeravatar
Mathias
 
Beiträge: 225
Registriert: Mi 4. Jun 2008, 22:30
Wohnort: Berlin
CakePHP-Version: 1.3.x
OS: OS X 10.6.x

Re: loginRedirect() leitet erst nach 2. Login weiter

Beitragvon getit » Fr 30. Jan 2009, 11:13

@Mathias

Macht ja nix wenn Du mir nicht helfen kannst.
Du versuchst es wenigstens.


Die login-Action hat eigentlich auch keine Funktion.
Hat auch nix mit ACL zu tun.
Wenn ich die Auth-Component einbinde wird automatisch ne Seite fürs Anmelden angezeigt.
Dazu muss im Controller (norm. UsersController - kann aber in beforeFilert() mit loginAction() auch in einem anderen Controller realisiert werden) eine leere login-Action existieren und ein entsprechendes View dazu.

ACL ist nur dafür da, einem best. Benutzer (in meinem Fall der Gruppe) ein Aktion zu erlauben oder zu verbieten.
getit
 
Beiträge: 105
Registriert: Mo 22. Dez 2008, 13:06
CakePHP-Version: 1.2.1.8004
OS: Vista


Zurück zu Components

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

cron