Cakephp, PHP

Auth component Cakephp 2

Khi user login hệ thống cakephp, chúng ta hay sử dụng:
$this->Auth->login()
Nếu trường hợp đúng rồi thì hẳn là chẳng quan tâm làm gì. Tuy nhiên, 1 lúc nào đó tự nhiên ta thấy nó bị lỗi. Lúc đó việc debug trở nên vô cùng khó khăn.

Cấu trúc của phần authenticate thường khai báo:

public $components = array(
‘Auth’ => array(
‘loginRedirect’ => array(
‘controller’ => ‘admin’,
‘action’ => ‘index’
),
‘logoutRedirect’ => array(
‘controller’ => ‘index’,
‘action’ => ‘index’
),
‘authenticate’ => array(
‘Form’ => array(
‘passwordHasher’ => array(
‘className’ => ‘Simple’,
‘hashType’ => ‘sha256’
),
‘fields’ => array(‘username’ => ’email’),
‘scope’ => array(‘User.status’ => 1),
)
)
);

Các phần loginRedirect, logoutRedirect đúng như tên gọi.
Phần authenticate là phần quy định thông số login.
Ở đây: passwordHasher chính là khai báo của password, mặc định là sẽ so khớp với trường password trong database.
Fields: các trường cần select ra trong database
Scope: phạm vi, hay điều kiện
Khi hàm $this->Auth->login() chạy
-> AuthComponent, ở đây sẽ lấy ra userModel cần so khớp, request, response đang chạy.
-> FormAuthenticate, ở đây sẽ so khớp phần field lấy ra trong khai báo component ở trên với request truyền vào có xuất hiện không.
Lưu ý ở đây: cakephp sẽ ghép userModel với fields để so khớp.
Ví dụ: userModel mặc định là User
fields ở trên của username là email
Khi đó request truyền lên phải tồn tại User.email, nếu không thì hàm $this->Auth->login() sẽ trả về fail.
Với trường hợp khai báo component như trên, cakephp sẽ so khớp 2 trường: User.email, User.password

-> Tiếp theo sẽ quay trở lại hàm AuthComponent để mã hóa password theo khai báo của component
-> Trả về kết quẳ nếu nhận được.