はじめに
Laravelの認証、セッション、ユーザー登録について学習したので、自分用の復習問題としてまとめます。
今回は、HTTPのステートレス性、User モデルの設定、パスワードのハッシュ化、Auth の役割を中心に復習します。
参考:Laravel公式ドキュメント - Authentication
① HTTPとセッション
Q1. HTTPが「ステートレス」とはどういう意味?
答えを見る
各リクエストが独立しており、HTTP自体は前回のリクエストの状態を記憶しないという意味。
Q2. ステートレスなHTTPで、ログイン状態を保持できるのはなぜ?
答えを見る
ログイン成功後にサーバーがセッションを作成し、ブラウザがCookieでセッションIDを送信するため。
サーバーはそのIDに対応するセッションデータを取得し、ユーザーを識別できる。
Q3. Cookieとセッションストアの役割の違いは?
答えを見る
- Cookie:ブラウザ側に保存され、一般的にセッションIDをサーバーへ送る
- セッションストア:セッションデータをファイル、DB、Redisなどに保存する
Q4. auth()->user() はどのように現在のユーザーを取得する?
答えを見る
セッションに保存されているユーザーIDを使って、データベースからユーザー情報を取得する。
例えば、セッションにユーザーID 1 が保存されている場合、users テーブルからIDが 1 のユーザーを探し、User オブジェクトとして返す。
② User モデル
Q5. User モデルが Authenticatable を継承する理由は?
答えを見る
UserモデルでLaravelのログイン機能を使えるようにするため。
Q6. $fillable の役割は?
protected $fillable = [
'name',
'email',
'password',
];
答えを見る
create() や update() で一括代入できる属性を限定し、意図しないカラムへの代入を防ぐ。
Q7. $hidden に password と remember_token を指定する理由は?
protected $hidden = [
'password',
'remember_token',
];
答えを見る
モデルを配列やJSONに変換したときに、パスワードハッシュや認証トークンを出力しないようにするため。
Q8. 次の2つのキャストは何をする?
protected $casts = [
'email_verified_at' => 'datetime',
'password' => 'hashed',
];
答えを見る
-
datetime:日時をCarbonオブジェクトとして扱えるようにする -
hashed:パスワードの代入時にハッシュ化して保存する
hashed は復号化ではないため、保存後のハッシュ値から元のパスワードには戻せない。
③ ユーザー登録
Q9. 次の unique:users は何を確認する?
'email' => 'required|string|email|max:255|unique:users',
答えを見る
送信されたメールアドレスが、users テーブルの email カラムに既に存在しないかを確認する。
カラム名を省略した場合は、バリデーション対象のフィールド名 email が使われる。
Q10. confirmed ルールはどのフィールドと比較する?
'password' => 'required|string|min:8|confirmed',
答えを見る
password_confirmation フィールドと比較し、両方の値が一致するか確認する。
Q11. 次のコードで平文のパスワードを渡せるのはなぜ?
$user = User::create([
'name' => $validated['name'],
'email' => $validated['email'],
'password' => $validated['password'],
]);
答えを見る
User モデルの password に hashed キャストが設定されていれば、保存時にLaravelが自動的にハッシュ化するため。
ただし、hashed キャストがない設計では Hash::make() などによる明示的なハッシュ化が必要。
Q12. 次の Auth::login($user) は何をする?
Auth::login($user);
答えを見る
作成済みの $user を現在の認証済みユーザーとしてログイン状態にする。
これにより、ユーザー登録直後に再度ログインさせず、ダッシュボードなどへ移動できる。
④ Auth、Hash、Facade
Q13. 次の Auth メソッドはそれぞれ何をする?
Auth::check();
Auth::user();
Auth::logout();
答えを見る
-
check():現在のユーザーがログイン済みか確認する -
user():現在ログインしているユーザーを取得する -
logout():現在のユーザーの認証情報をセッションから取り除く
Q14. Hash::make() と Hash::check() の違いは?
答えを見る
-
Hash::make():平文のパスワードからハッシュ値を作る -
Hash::check():平文のパスワードと保存済みのハッシュ値が対応するか確認する
Q15. Facadeとヘルパー関数の書き方の違いは?
Auth::user();
auth()->user();
答えを見る
Auth::user() はFacadeを使う書き方で、通常は次の use 宣言が必要。
use Illuminate\Support\Facades\Auth;
auth()->user() はグローバルなヘルパー関数なので use 宣言は不要。どちらもLaravelの認証サービスを利用する。
Q16. 安全にログアウトするとき、Auth::logout() と一緒に行うことは?
答えを見る
セッションを無効化し、CSRFトークンを再生成する。
Auth::logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
まとめ
今回、特に覚えておきたいのは次の5つです。
- HTTP自体はステートレスだが、Cookieとセッションでログイン状態を保持できる
-
$fillableは一括代入を制限し、$hiddenは配列やJSONへの出力を制限する -
hashedキャストでパスワードをハッシュ化できる -
uniqueとconfirmedで登録データを検証する -
Auth::login()、check()、user()、logout()で認証状態を操作できる