5

Przeprowadzam się z CakePHP 1.3 do CakePHP 2.2.2 i chcę użyć uwierzytelniania Basic Http dla prostego obszaru administracyjnego. Nie jestem w stanie sprawić, żeby to działało i myślę, że zrozumiałem coś złego w dokumentacji.Uwierzytelnianie CakePHP 2 Basic Auth Authentication

Z dokumentacji zrozumiałem, muszę coś zrobić jak

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

Rozumiem, że dalej muszę przedłużyć Komponent BaseAuthenticate wrócić poprawną datę użytkownika, ale nawet z powyższej konfiguracji chciałbym oczekiwać, że w przeglądarce Okno dostępu do Http otworzy się w wyskakującym okienku. Ale nic takiego się nie dzieje, zamiast tego jestem przekierowywany do/users/login, który nie istnieje. Dlaczego potrzebuję widoku logowania do dostępu Http? Jestem zdezorientowany.

Odpowiedz

7

Dodaj składnik Auth do kontrolera (lub do AppController)

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

CakePHP wymaga działań logowania, więc nawet jeśli używasz uwierzytelniania podstawowego, w którym agent HTTP jest odpowiedzialny za UI do zbierania danych uwierzytelniających, musisz wyznaczyć działanie w jakimś kontrolerze, który zajmie się logowaniem (w podstawowym przypadku wyśle ​​nagłówek WWW-Authenticate: Basic, jeśli użytkownik nie jest jeszcze uwierzytelniony).

Można ustawić AuthCompoment „s $loginAction, ale to domyślne (i wskazane jest, aby nie łamać konwencje) do metody w UsersControllerlogin. Więc najpierw utworzyć pusty szablon na View/Users/login.ctp, następnie dodać następujące wpisy do 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

Dziękuję, że działa! –

Powiązane problemy