私は今、何日も問題に夢中になっています。YouTube のドキュメントとビデオを使用しました。また、その特定の問題についてのみのチュートリアルもあります。しかし、私には見えない何かが間違っています。Cakephp を使用して Web システムにログイン システムを作成しました。私のユーザーの表は次のとおりです。
CREATE TABLE `usuarios` (
`Id` INT(50) UNSIGNED NOT NULL AUTO_INCREMENT,
`grupo_id` INT(50) UNSIGNED NOT NULL,
`Status` VARCHAR(30) NOT NULL COMMENT 'Coordenador/Bolsista/Super',
`Nome` VARCHAR(50) NOT NULL,
`Login` VARCHAR(50) NOT NULL,
`Email` VARCHAR(50) NOT NULL,
`Senha` VARCHAR(50) NOT NULL,
`created` DATETIME NULL DEFAULT NULL,
`modified` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`Id`),
UNIQUE INDEX `Login` (`Login`),
UNIQUE INDEX `Nome` (`Nome`),
INDEX `FK_usuarios_grupos` (`grupo_id`),
CONSTRAINT `FK_usuarios_grupos` FOREIGN KEY (`grupo_id`) REFERENCES `grupos` (`Id`) ON UPDATE CASCADE
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
AUTO_INCREMENT=8;
Status は、システムのさまざまな部分の認証レベルです。3 つのオプションはコメントで説明されています。
In my AppController, after some time, I coded:
class AppController extends Controller {
public $components = array('Session',
'Auth'=>array(
'authenticate' => array(
'Form' => array(
'fields'=>array(
'username'=>'Login',
'password'=>'Senha'
),
'userModel'=> 'Usuario'
),
),
'loginAction' =>array(
'Controller' => 'Usuarios',
'action' => 'login'
),
'loginRedirect'=>array('Controller'=>'Usuarios', 'action'=>'index'),
'logoutRedirect'=>array('Controller'=>'Usuarios', 'action'=>'index'),
'authError'=>"You can't access that page",
'authorize'=>'Controller',
'loginError'=> 'Login errado'
)
);
public function isAuthorized($usuario=null) {
//return parent::isAuthorized($usuario);
return true;
}
public function beforeFilter() {
$this->Auth->allow('index','view');
$this->set('logged_in', $this->Auth->loggedIn());
$this->set('current_user', $this->Auth->user());
}
}?>
isAuthorized メソッドには 2 つのオプションがあります。登録済み(ハッシュ化されたパスワード付き)か無効なものかは関係ありません。なぜこれが起こるのか分かりませんが、isAutorized メソッドの問題だと思います。
私の特定のコントローラーには、次の関連メソッドがあります。
public function login() {
if ($this->request->is('post')) {
if ($this->Auth->login()) {
return $this->redirect($this->Auth->redirect());
} else {
$this->Session->setFlash(__('Username or password is incorrect'), 'default', array(), 'auth');
$this->Session->setFlash('Username or password is incorrect');
}
}
}
public function logout() {
$this->redirect($this->Auth->logout());
}
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('add_bolsista','logout');
}
public function isAuthorized($usuario = null) {
if (($usuario['Status'] == 'Super') || ($usuario['Status'] == 'Coordenador') || ($usuario['Status'] == 'Bolsista')) {
return true;
}
if (in_array($this->action, array('edit', 'delete'))) {
if ($usuario['Id'] != $this->request->params['pass'][0]) {
return false;
}
}
return true;
}
public function isAuthorized($usuario = null) {
// Any registered user can access public functions
if (empty($this->request->params['Bolsista'])) {
return true;
}
// Only admins can access admin functions
if (isset($this->request->params['Super'])) {
return (bool)($usuario['Status'] === 'Super');
}
// Default deny
return false;
}
isAuthorized...none の 2 つのバージョンは、実際には機能していないようです。誰??