我做了很多研究,遵循了许多不同的例子,但仍然无法让它正常运行。
所以这是注册中控制器操作的一部分:
if(!empty($this->request->data)){
$this->request->data['Company']['start_date']= date("Y-m-d");
unset($this->Company->User->validate['company_id']);
if($this->Company->saveAssociated($this->request->data)){
$user = $this->request->data['User'];
$data['User']['password'] = $user[0]['password'];
$data['User']['email'] = $user[0]['email'];
if($this->Auth->login($data)){
$this->redirect($this->Auth->redirect(array('controller'=>'customers', 'action'=>'index')));
}...
因此保存了用户并创建了一个新的用户电子邮件和密码数组。然后将其传递给 $ this-> Auth-> login 。登录似乎通过,但以下错误是重定向到客户控制器:
Notice (8): Undefined index: role [APP\Controller\CustomersController.php, line 32]
Notice (8): Undefined index: role [APP\Controller\CustomersController.php, line 36]
即使角色字段在用户创建时自动设置为管理员。 以下是CustomerController的外观:
public function isAuthorized($ user){
if($user['role'] == 'manager'){
return true;}
if (in_array($this->action, array('add', 'edit', 'index', 'view', 'delete', 'users'))){
if($user['role'] != 'manager'){
return false;
}}return true;}
非常感谢任何帮助。
答案 0 :(得分:0)
检查AuthComponent::login()
将用户数据传递给AuthComponent::login()
时,您正在记录用户,但不会进行身份验证!在这种情况下,“登录”意味着,所提供的数据将存储在会话中,并且在以下请求中,如果会话中存在数据(在特定情况下),则将用户视为已登录组件使用的密钥),即你甚至可以只传递123456
,用户将被视为已登录。
另一方面,进行身份验证会导致数据库查找,其中将获取所有用户数据,从而将其存储在会话中。
所以role
字段不可用,因为您尚未将其传递给AuthComponent::login()
,您只传递了email
和password
,因此这些是唯一的以后可以使用的字段。顺便说一下, 在进行这样的手动登录时不要提供密码 !您不希望在会话中携带此类敏感信息!
要解决此问题,请同时传递role
字段,或调用AuthComponent::login()
而不传递任何数据(确保使用表单身份验证,以便请求中传递的数据正在使用),以便它将验证用户并从数据库中获取其数据。
另见http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html