在CakePHP中注册后记录用户

时间:2013-10-31 19:18:55

标签: cakephp cakephp-2.3

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

所以这是注册中控制器操作的一部分:

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;}

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

检查AuthComponent::login()

的文档和来源

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

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

所以role字段不可用,因为您尚未将其传递给AuthComponent::login(),您只传递了emailpassword,因此这些是唯一的以后可以使用的字段。顺便说一下, 在进行这样的手动登录时不要提供密码 !您不希望在会话中携带此类敏感信息!

要解决此问题,请同时传递role字段,或调用AuthComponent::login()而不传递任何数据(确保使用表单身份验证,以便请求中传递的数据正在使用),以便它将验证用户并从数据库中获取其数据。

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