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子
どうよ(ドヤ顔)


