1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

学習ログ #30|Laravelの認証・セッションとユーザー登録を復習するための自分用問題集

1
Posted at

はじめに

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つです。

  1. HTTP自体はステートレスだが、Cookieとセッションでログイン状態を保持できる
  2. $fillable は一括代入を制限し、$hidden は配列やJSONへの出力を制限する
  3. hashed キャストでパスワードをハッシュ化できる
  4. unique と confirmed で登録データを検証する
  5. Auth::login()、check()、user()、logout() で認証状態を操作できる
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?