暇人の寝室
技術系の記事や読書・アニメの感想などを投稿します。
プログラミング
前回までで一通りのブログ部分は実装した。今回は認証部分を作成し、いよいよ完成する。
コードは下記の通り。
<?php
function required_unlogined_session(){
session_start();
if(isset($_SESSION['username'])){
header('Location: /');
exit;
}
}
function required_logined_session(){
session_start();
if(!isset($_SESSION['username'])){
header('Location: /login');
exit;
}
}
function generate_token(){
return hash('sha256',session_id());
}
function validate_token($token){
return $token === generate_token();
}
function h($str){
return htmlspecialchars($str,ENT_QUOTES,'UTF-8');
}
required_unloggined_session()では認証済みユーザがログイン画面のような認証済みのユーザに不必要なページにたどり着いた場合にルートに転送する処理が書かれている。
一方で、required_loggined_session()では未認証のユーザが認証の必要なページにたどり着いた場合にログイン画面に転送するように書かれている。
generate_token()、validate_token()はセッションIDをハッシュ化し、チェックするメソッドである。
各ビューにrequired_unloggined_session()またはrequired_loggined_sessionを実行し、認証をコントロールする。
全4回でPHPによるブログの作成を行った。(PDOには頼ったが)フレームワークに頼らずに一通りの実装をすることでPHPに対しての自信がついた。
また、フレームワークを頼れないので、モデルを作成するなどのモジュール化を自分の手で行うことになった。ここで改めてビューとモデルが分離されていると見やすさにもつながるし、問題が起きたときの原因特定にも効果があると感じた。今回は書いていないが、テストを書くときにも機能の分離は有効だと推測する。
今回のブログ作成で、Laravelの凄さをひしひしと感じた。SQLを生成するクラスやEloquentモデル、ルーティング、ビューなどさまざまな機能が使いやすく用意されているのだ。
Laravelの機能を探っていくようなトップダウンの学習と、今回のように素の言語から手を動かして実装して学ぶボトムアップの学習を両方同時並行で進めていくのが効果的な学習ほうなのかもしれない。