5

Ich ziehe von CakePHP 1.3 zu CakePHP 2.2.2 und möchte Basic HTTP-Authentifizierung für einen einfachen Admin-Bereich verwenden. Ich bin einfach nicht in der Lage, es zum Laufen zu bringen, und ich denke, dass ich in der Dokumentation etwas falsch verstanden habe. IchCakePHP 2 Basic Auth Authentication

Aus der Dokumentation verstand ich so etwas wie

public $components = array(
    'Auth' => array(
     'authenticate' => array(
     'Basic' 
    ), 
     'authError' => 'You may not access this area.', 
     'authorize' => array('Controller') 
    ) 
); 

Ich verstehe zu tun habe, dass weiteres es brauche die BaseAuthenticate Komponente zu verlängern gültiges Datum zurückzubringen, sondern auch mit der obigen Konfiguration ich erwarten würde, dass der Browser Http Access Dialog würde in einem Popup-Fenster öffnen. Aber so etwas passiert nicht, stattdessen werde ich nach/users/login weitergeleitet, das nicht existiert. Warum benötige ich eine Login-Ansicht für den HTTP-Zugriff? Ich bin verwirrt.

Antwort

7

Fügen Sie die Auth Komponente zu Ihrem Controller (oder den AppController)

class ThingsController extends AppController { 
    var $components = array('Auth'); 
} 

CakePHP erfordert eine Aktion Login, so dass selbst wenn Sie die Standardauthentifizierung verwenden, wobei der HTTP-Agent für das verantwortlich ist, UI zum Sammeln von Authentifizierungsdetails, müssen Sie eine Aktion in einem Controller festlegen, der die Anmeldung übernimmt (im Standardfall wird der Header WWW-Authenticate: Basic gesendet, wenn der Benutzer noch nicht authentifiziert ist).

Sie können die AuthCompoment ‚s $loginAction, setzen aber diese Vorgaben (und ist ratsam, nicht Konventionen zu brechen) an die login Methode im UsersController. Also, zunächst eine leere Vorlage bei View/Users/login.ctp erstellen, dann fügen Sie folgendes zu Ihrem UsersController

class UsersController extends AppController { 

    public $components = array(
     'Session', 
     'Auth' => array(
      'authenticate' => array('Basic') 
     ) 
    ); 

    public function login() { 
     if ($this->Auth->login()) { 
      return $this->redirect($this->Auth->redirect()); 
     } else { 
      $this->Session->setFlash('Not able to login'); 
     } 
    } 

    public function logout() { 
     $this->redirect($this->Auth->logout()); 
    } 

} 
+0

Danke, dass gearbeitet! –