CakePHP3でログイン中のユーザー情報を取得する方法

CakePHP3でログイン中のユーザー情報を取得する方法

89 回閲覧されました

みなさんこんにちは、jonioです。

今回はCakePHP3でログインユーザーの情報を取得する方法の解説になります。

おすすめ参考書

CakePHP3はまだまだ仕事で使われます。

下記の参考書がおすすめです。

CakePHPのバージョン

3.6で解説しますが3系なら対応していると思います。

方法

下記の2つの方法があると思います。

  • $this->Auth->user()
  • $this->getRequest()->getSession()->read()

それぞれ見ていきます。

$this->Auth->user()

これはログイン中のユーザーの情報を取得します。

コントローラーで下記の記述をします。

dd($this->Auth->user());
[
	'id' => (int) 1,
	'name' => '東京',
	'mail' => '',
	'created' => object(Cake\I18n\FrozenTime) {

		'time' => '2024-09-13T05:36:21+00:00',
		'timezone' => 'UTC',
		'fixedNowTime' => false
	
	},
	'modified' => object(Cake\I18n\FrozenTime) {

		'time' => '2024-09-13T05:36:21+00:00',
		'timezone' => 'UTC',
		'fixedNowTime' => false
	
	},
	'deleted' => null
]

ログインに使ったテーブルの中のログインユーザーの情報が表示されます。

情報にアクセスする時は下記の書き方をします。

//namaの項目の値を取得
$this->Auth->user()['name']

$this->getRequest()->getSession()->read()

これはページを表示しているセッション情報を全て取得します。

コントローラーで下記の記述をします。

$this->getRequest()->getSession()->read()
[
	'Config' => [
		'time' => (int) 1726824043
	],
	'Flash' => [],
	'Auth' => [
		'User' => [
			'id' => (int) 1,
			'name' => '東京',
			'mail' => '',
			'created' => object(Cake\I18n\FrozenTime) {

				'time' => '2024-09-13T05:36:21+00:00',
				'timezone' => 'UTC',
				'fixedNowTime' => false
			
			},
			'modified' => object(Cake\I18n\FrozenTime) {

				'time' => '2024-09-13T05:36:21+00:00',
				'timezone' => 'UTC',
				'fixedNowTime' => false
			
			},
			'deleted' => null
		]
	]
]

ログインユーザー以外の他の項目の情報(Config・Flash)も取得できます。

情報にアクセスする時は下記の書き方をします。

//nameの項目の値を取得
$this->getRequest()->getSession()->read('User.Auth.name');

これの利点

例えば複数のログインがあったとします。

ログインをしている時に他のログインをしようとすると既にログインした情報が適用されるので新たにログインする所でログインが飛ばされます。

そしてログイン後に表示されるページでログイン情報を使って表示する情報がある場合前のログイン情報が適用されるので情報を取得できずエラーが起こる可能性があります。

そんな場合は「$this->getRequest()->getSession()->read()」を使うと他のログインページで既にログインしている時の情報が適用されなくなるのでエラーを回避できます。