如何与经过身份验证的用户数据一起检索关联?

时间:2015-09-18 21:28:57

标签: authentication cakephp associations cakephp-3.0

我有一个Users表和一个UsersProfiles表 - 这两个表明显相关,用户表存储基本user_idusernamepassword users_profiles表存储firstnamelastnamejob_title等。

在CakePHP 3中,登录时对Authentication Component的调用返回基本用户表行。我想修改相同的也返回相应的配置文件行。我怎么能这样做?

我找到了一种方法 - 但我不确定是否有更优雅或更简单的方法。

public function login() {
        if ($this->request->is('post')) {
            $user = $this->Auth->identify();
            if ($user) {
                // load profile and associate with user object
                $profile = $this->Users->UsersProfiles->get($user['id']);
                $user['users_profile'] = $profile;
                $this->Auth->setUser($user);
                return $this->redirect($this->Auth->config('loginRedirect'));
            }
            $this->Flash->error(__('Invalid username or password, try again'));
        }
    }

1 个答案:

答案 0 :(得分:6)

contain选项

在CakePHP 3.1之前,使用contain选项

$this->loadComponent('Auth', [
    'authenticate' => [
        'Form' => [
            'contain' => ['UsersProfiles']
        ]
    ]
]);

自定义查找程序

从3.1开始,您可以使用finder选项定义用于构建获取用户数据的查询的查找程序

$this->loadComponent('Auth', [
    'authenticate' => [
        'Form' => [
            'finder' => 'auth'
        ]
    ]
]);

在你的表类中

public function findAuth(\Cake\ORM\Query $query, array $options)
{
    return $query->contain(['UsersProfiles']);
}

两种解决方案

将确保AuthComponent::identify()返回的数据包含相关的UsersProfiles

另见