5

Tôi đang chuyển từ CakePHP 1.3 sang CakePHP 2.2.2 và muốn sử dụng xác thực cơ bản Http cho một khu vực quản trị đơn giản. Tôi chỉ không thể làm cho nó hoạt động và tôi nghĩ rằng tôi đã hiểu điều gì đó sai trong tài liệu.CakePHP 2 Xác thực xác thực cơ bản

Từ các tài liệu tôi hiểu tôi phải làm một cái gì đó giống như

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

Tôi hiểu rằng hơn nữa tôi cần phải mở rộng các Component BaseAuthenticate trở lại ngày người dùng hợp lệ nhưng ngay cả với cấu hình trên, chúng tôi hy vọng rằng các trình duyệt Hộp thoại truy cập Http sẽ mở ra trong cửa sổ bật lên. Nhưng không có gì giống như điều này xảy ra, thay vào đó tôi được chuyển hướng đến/users/login mà không tồn tại. Tại sao tôi cần một chế độ xem đăng nhập để truy cập Http? Tôi bị bối rối.

Trả lời

7

Thêm các thành phần Auth để điều khiển của bạn (hoặc cho AppController)

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

CakePHP đòi hỏi một hành động đăng nhập, vì vậy ngay cả khi bạn sử dụng xác thực Basic, nơi mà các đại lý HTTP là chịu trách nhiệm về Giao diện người dùng để thu thập chi tiết xác thực, bạn cần chỉ định một hành động trong một số trình điều khiển sẽ xử lý thông tin đăng nhập (trong trường hợp Cơ bản, nó sẽ gửi tiêu đề WWW-Authenticate: Basic nếu người dùng chưa được xác thực).

Bạn có thể đặt 's $loginAction, AuthCompoment nhưng giá trị mặc định này (và nên không vi phạm công ước) đến login phương pháp trong UsersController. Vì vậy, đầu tiên tạo ra một mẫu sản phẩm nào tại View/Users/login.ctp, sau đó thêm dòng sau vào bạn 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

Cảm ơn bạn, mà làm việc! –

Các vấn đề liên quan