カテゴリ: Symfony 更新日: 2026/01/22

SymfonyのGuard認証を完全ガイド!初心者でもわかるカスタム認証の仕組みと使い方

SymfonyのGuard認証の仕組みと使い方
SymfonyのGuard認証の仕組みと使い方

先生と生徒の会話形式で理解しよう

生徒

「Symfonyで自分だけのログイン方法を作りたいんですが、どうすればいいんですか?」

先生

「そんな時に使えるのがGuard認証です。ログイン処理を細かくカスタマイズしたい時にとても便利ですよ。」

生徒

「ログイン処理をカスタマイズ?何だか難しそうですが、どういう仕組みなんですか?」

先生

「Guardは“認証を担当する専用スタッフ”のようなもので、ユーザーの情報を確認して正しければ中へ通す、という役割を持っています。順番に解説していきますね。」

1. Guard認証とは?初心者向けにやさしく説明

1. Guard認証とは?初心者向けにやさしく説明
1. Guard認証とは?初心者向けにやさしく説明

SymfonyのGuard認証は、ログイン処理を自由にカスタマイズできる仕組みです。通常のログイン機能ではSymfonyが決まった手順で認証しますが、Guardを使うと自分で「どのように認証するか」を作り込むことができます。

たとえば、次のような場面でGuardが役立ちます。

  • 通常のログインフォームではなく、独自の画面やAPIでログインさせたい
  • トークン(キーワードのようなもの)を使って認証したい
  • 外部サービスと連携してログインしたい

初心者の方は「Guard=カスタム認証の設計図」とイメージすると理解しやすくなります。

2. Guard認証の流れをイメージしてみよう

2. Guard認証の流れをイメージしてみよう
2. Guard認証の流れをイメージしてみよう

Guardが行う認証の流れは、大きく分けて次のステップです。

  • supports:このリクエストは認証の対象かどうか判断する
  • getCredentials:送信されたユーザー情報を取り出す
  • getUser:渡された情報からユーザーを取得する
  • checkCredentials:ユーザーのパスワードなどが正しいか確認する
  • onAuthenticationSuccess:ログイン成功時の処理
  • onAuthenticationFailure:ログイン失敗時の処理

つまり、Guardは「誰が来たのか → 本物かどうか → 中へ案内するかどうか」を順番に判断しているのです。

3. GuardAuthenticator クラスのイメージを理解する

3. GuardAuthenticator クラスのイメージを理解する
3. GuardAuthenticator クラスのイメージを理解する

Guard認証を作ると、Symfonyは「GuardAuthenticator」というクラスを用意します。このクラスの中に先ほどの認証処理をまとめて書きます。


class LoginAuthenticator extends AbstractGuardAuthenticator
{
    public function supports(Request $request)
    {
        return $request->getPathInfo() === '/login' && $request->isMethod('POST');
    }
}

この例では、/loginへPOSTされたときだけ認証処理を行うように設定しています。Guardは「いつ認証するか」を自分で決められる点が特徴です。

4. ユーザー情報の取り出しと照合の仕組み

4. ユーザー情報の取り出しと照合の仕組み
4. ユーザー情報の取り出しと照合の仕組み

supportsで認証対象と判断されたら、次にメールアドレスやパスワードといった情報を取り出します。


public function getCredentials(Request $request)
{
    return [
        'email' => $request->request->get('email'),
        'password' => $request->request->get('password'),
    ];
}

ここで取得した情報をもとに、getUserメソッドでデータベースからユーザーを検索します。


public function getUser($credentials, UserProviderInterface $userProvider)
{
    return $userProvider->loadUserByUsername($credentials['email']);
}

ユーザーが見つかったら、checkCredentialsでパスワードを照合します。SymfonyのPasswordHasherを使って安全に確認します。

5. 認証成功と失敗の処理

5. 認証成功と失敗の処理
5. 認証成功と失敗の処理

ログインが成功した場合は、どのページに案内するかを指定できます。


public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
{
    return new RedirectResponse('/dashboard');
}

逆にログイン失敗時には、エラーメッセージを表示したり、ログイン画面へ戻したりできます。


public function onAuthenticationFailure(Request $request, AuthenticationException $exception)
{
    return new RedirectResponse('/login');
}

6. Guard認証を使うメリット

6. Guard認証を使うメリット
6. Guard認証を使うメリット

Guard認証には次のようなメリットがあります。

  • ログイン処理を自由にカスタマイズできる
  • API用のトークン認証など柔軟な処理が書ける
  • 外部サービスと連携したログイン機能が作れる
  • 認証の流れを細かく制御できるため高度な仕組みを作りやすい

つまり「普通のログインでは物足りない」「もっと自由に認証の仕組みを作りたい」という場面にぴったりなのがGuardです。

関連記事:
カテゴリの一覧へ
新着記事
New1
Laravel
LaravelでAPI用のコントローラを作成する方法(APIリソース)を初心者向けに解説
New2
Laravel
LaravelでルートをBladeテンプレートに記述する方法(route関数)
New3
Symfony
Symfonyのセッション管理完全ガイド|セッションに値を保存・取得・削除する方法を初心者向けに解説
New4
Symfony
Symfonyで最初のページを表示してみよう!初心者でもできるHello World入門
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelでモデルからデータを取得・保存・更新・削除する方法を完全ガイド!初心者でもわかるEloquent ORM入門
No.2
Java&Spring記事人気No2
Laravel
LaravelでBasic認証を実装するミドルウェアの使い方!初心者向けガイド
No.3
Java&Spring記事人気No3
Laravel
Laravelでログを出力する方法(Monolog・storage/logs)
No.4
Java&Spring記事人気No4
Symfony
SymfonyでTwigテンプレートを表示する方法を完全ガイド!初心者にもわかるHTMLとの違いや使い方
No.5
Java&Spring記事人気No5
Laravel
LaravelでファクトリとSeederを組み合わせてダミーデータを生成する方法!初心者でも簡単にテストデータ作成
No.6
Java&Spring記事人気No6
Laravel
Laravelのルート一覧を確認する方法!初心者でもわかるphp artisan route:listの使い方
No.7
Java&Spring記事人気No7
Symfony
Symfonyのコントローラでリダイレクトする方法を徹底解説!初心者にもやさしく解説
No.8
Java&Spring記事人気No8
Laravel
Laravelのデータベース設定方法を完全ガイド!初心者でもわかる.envファイルの使い方