0

我做了很多研究,遵循了许多不同的例子,但仍然无法让它正常运行。

所以这里是注册控制器动作的一部分:

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 的样子:

公共功能 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;}

很感谢任何形式的帮助。

4

1 回答 1

0

检查文档和来源AuthComponent::login()

将用户数据传递给 时AuthComponent::login(),您正在登录用户,但不会进行任何身份验证!在这种情况下, “登录”意味着所提供的数据被存储在会话中,并且在以下请求中,如果会话中存在数据(在组件使用的特定密钥中),用户将被视为已登录,即您甚至可以通过123456,用户将被视为已登录。

另一方面,身份验证会导致数据库查找,其中将获取所有用户数据并因此存储在会话中。

所以该role字段不可用,因为您还没有将它传递给AuthComponent::login(),您只传递了emailand password,因此这些是以后唯一可用的字段。顺便说一句,在进行此类手动登录时不要提供密码!您不想在会话中携带此类敏感信息!

要解决这个问题,要么也传递该role字段,要么在AuthComponent::login()不传递任何数据的情况下调用(确保您正在使用表单身份验证,以便使用请求中传递的数据),以便它对用户进行身份验证并获取它的数据来自数据库。

另请参阅http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html

于 2013-10-31T20:02:11.780 回答