CakePHP5入門【CakePHP5認証編④】細かい修正・改良

A子
そだなー
各ユーザの「最新のログイン時間」と「最終のログアウト時間」を「users」テーブルに格納しよう
あと、本番環境への設置を行うために、最初のユーザを作成するためのメソッド(及び画面)を用意しようか
(現状では、ソースコードを修正しないと一人目のユーザ作成ができないからね)

C菜
それではデータベーステーブルの変更からですね~
ALTER TABLE users
ADD login_time datetime AFTER session, ADD logout_time datetime AFTER login_time; |
これで「session」と「created」の間に「login_time」と「logout_time」が挿入されます~
(どちらもdatetime型です~)

↓


A子

B美
(【CakePHP5応用編⑫】を参照)
要するに、そのクラスの「now」メソッドを呼ぶだけね

A子
use Cake\I18n\DateTime; |
のあと
$loginUser->login_time = DateTime::now();
または $loginUser->logout_time = DateTime::now(); |
で良いんじゃない?
上がログイン時で、下がログアウト時ね




C菜
あ、「UsersController.php」だけじゃなく「CleanupCommand.php」のほうも変更しないとです~



A子
それじゃ、さっそくテストしてみようか
私(ako@friction-river.jp)のアカウントでログインしてみるよ

C菜


A子
うん、完璧だね


C菜
(セッションタイムアウトさせますね~)


A子
OK、OK
cronジョブで自動的にログアウトされたよ
全く問題なし!
(毎時0分のcron処理だから、ログアウト時間もちょうど0分になるけどね)


B美
一覧では「作成日(created)」と「最終更新日(modified)」は要らないから…

C菜
まずは「index.php」を修正したあと、B美部長のアカウント(bimi@friction-river.jp)でログインして、ユーザ管理画面を開いてみるです~
ちなみに、ログアウト時間がNULLだったら「-」を表示するようにしています~

↓


A子
「作成日」と「最終更新日」は削除せず、「最新ログイン時間」と「最終ログアウト時間」の二つを追加したよ

↓


C菜
「templates/Users」の中にある「add.php」を開いて、ちょっとだけ書き換えてから「first_user.php」というファイル名で保存するです~


A子
こんな感じでどうかな?
(ほとんどは「add」メソッドのコピペだけど…(苦笑))



B美
・「login」メソッドから「first_user」メソッドへリダイレクトする記述を追加したこと
・一人以上のユーザがすでにいるのなら、「first_user」メソッドを実行できないようにしたこと
この三点については褒めてあげましょう

A子
でもまぁ、我ながらよく気付いたと思うよ

C菜
DELETE FROM users; |
を実行してから、トップページにアクセスしてみます~

A子
「リダイレクト回数が多すぎます」だって?


C菜
ググってもChatGPTに聞いても要領を得ないです~

B美
実はさっきの「first_user」というメソッド名に問題があるのよ

A子
どういうことよ!

B美
つまり「スネークケース」である「first_user」は、「キャメルケース」である「firstUser」に変更すればOK…ってわけ
(「templates/Users」の中に作った「first_user.php」については、リネームしなくても良いけどね)

A子
てか、知らなきゃ一生悩み続けるやつじゃん(苦笑)
くっそー、あれこれ悩みながらコードを修正し続けた時間を返せと言いたい!

B美
他のメソッドから呼び出されるprivateのメソッドとしてなら「スネークケース」でもOKよ
(URLと連動する場合だけ問題が発生するの…というか、そういう規則なのよ)

C菜
それではメソッド名を修正しますね~



A子
ちなみに、私のアカウント(ako@friction-river.jp)を最初のユーザとして登録してみた

↓


A子


C菜
(そうすれば、どの画面からでもログアウトできますし~)

A子
んじゃ、「templates/layout」の中にある「default.php」のほうへ「ログアウト」のリンクを移動しようか
(もちろん、「templates/Top」の「index.php」のほうも書き換えるよ)



C菜
おぉ、ばっちりです~
(トップページとユーザ管理画面の両方で「ログアウト」が可能になってます)



B美

A子
どうよ(ドヤ顔)