目次

    イントロダクション

    • 目的: Symfonyアプリケーションでソーシャルログインを実装する利点を紹介し、その概要を説明します。
    • : 「Symfonyでソーシャルログインを実装することで、ユーザーはFacebookやGoogleのアカウントを使って簡単にログインできるようになります。この記事では、Symfonyにおけるソーシャルログインの実装方法を解説します。

    準備

    • 必要なライブラリのインストール: Symfonyでソーシャルログインを行うために必要なライブラリのインストール方法を説明します。
    • : 「まず、knpuniversity/oauth2-client-bundle をインストールします。このバンドルは、OAuth2クライアントを簡単に設定できるようにしてくれます。」
    • コマンド:
      composer require knpuniversity/oauth2-client-bundle

    OAuth2プロバイダーの設定

    • OAuth2クライアントの設定: config/packages/knpu_oauth2_client.yaml ファイルにプロバイダーの設定を追加します。
    • : FacebookのOAuth2クライアント設定
    ~.yaml
    knpu_oauth2_client:
        clients:
            facebook:
                type: facebook
                client_id: '%env(OAUTH_FACEBOOK_CLIENT_ID)%'
                client_secret: '%env(OAUTH_FACEBOOK_CLIENT_SECRET)%'
                redirect_route: connect_facebook_check
                redirect_params: {}
    環境変数の設定: .env ファイルにクライアントIDとシークレットを追加します。以下URLからFacebook Cilent IDとシークレットIDを作成出来ます。
    OAUTH_FACEBOOK_CLIENT_ID=your_facebook_client_id 
    OAUTH_FACEBOOK_CLIENT_SECRET=your_facebook_client_secret

    セキュリティ設定

    セキュリティ設定で、Facebookからのコールバックや認証を処理するためのファイアウォールを設定します。
    ~.yaml
    security:
        firewalls:
            main:
                oauth:
                    resource_owners:
                        facebook: "/connect/facebook/check"
                    login_path:        "/connect"
                    use_forward:       false
                    failure_path:      "/login"
                anonymous:    true
                logout:
                    path:   /logout
                    target: /
                guard:
                    authenticators:
                        - App\Security\FacebookAuthenticator

    ルーティングの設定

    config/routes.yaml にFacebookの認証用ルートを設定します.

    〜.yaml
    facebook_connect:
    path: /connect/facebook
    controller: App\Controller\FacebookController::connect
    facebook_check:
    path: /connect/facebook/check
    controller: App\Controller\FacebookController::check

    コントローラーの作成

    Facebookの認証を管理するコントローラーを作成します。例えば、src/Controller/FacebookController.php に以下のコードを追加します。

    namespace App\Controller;
    use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
    use Symfony\Component\HttpFoundation\Request;
    use Symfony\Component\HttpFoundation\Response;
    use Symfony\Component\Routing\Annotation\Route;
    use KnpU\OAuth2ClientBundle\Client\Provider\FacebookClient;
    class FacebookController extends AbstractController
    {
        /**
         * @Route("/connect/facebook", name="facebook_connect")
         */
        public function connect(FacebookClient $facebookClient): Response
        {
            return $facebookClient->redirect(['email']);
        }
        /**
         * @Route("/connect/facebook/check", name="facebook_check")
         */
        public function check(Request $request): Response
        {
            // 認証後の処理
            $user = $this->getUser();
            // ここでユーザー情報を処理します
            return $this->redirectToRoute('homepage');
        }
    }

    テンプレートの作成

    ソーシャルログインボタンを含むテンプレートを作成します。たとえば、templates/security/login.html.twig Facebookログインボタンを追加します

    {% extends 'base.html.twig' %} 
     {% block body %}
      <h1>ログイン</h1> <form method="post" action="{{ path('facebook_connect') }}"> 
      <button type="submit">Facebookでログイン</button> </form> 
    {% endblock %}

    まとめ

    これで、SymfonyアプリケーションにFacebookなどのソーシャルログイン機能を実装するための基本的な設定が整いました。他のOAuth2プロバイダーも同様の手順で設定することができ、必要に応じてカスタマイズや追加の処理を行うことで、より強力な認証機能を提供することができます。

    最後までお読みいただきありがとうございました。また来月のLabでお会いしましょう。

    それではまた。

    PREV
    2024.08.13
    Looker Studio【旧データポータル】とは?
    NEXT
    2024.08.13
    MongoDB について