【Laravel】SocialiteでSNSアカウントでソーシャルログイン認証

laravel-socialite
  • URLをコピーしました!

今回は、LaravelSocialiteを使って、GoogleFacebookSNSアカウントを利用したソーシャルログイン認証について説明します。
なぜこの2つかと言うと、複数のSNSを使った場合の効率の良い導入方法の紹介と、単純に有名なSNSかつメールアドレスを取得できること。

目次

Socialiteでソーシャルログイン認証

Twitterのようにメールアドレスが取得できないと後々不便になるから導入しません。(経験則です)
あと、SNSからはログイン認証に必要な最低限のデータのみ取得することにします。
基本的に少しコードを追加するだけなので、電話番号とかアバターなどを取得したい方は別途調べてください。

事前準備(SNSの設定)

LaravelSocialiteパッケージでソーシャルログイン認証をするには、まずは各SNSの開発者(Developers)画面から、クライアントID(アプリID)やシークレットIDを取得し、コールバックURLの設定を行ってください。
そしてそれらの情報を設定ファイルに入力しておきましょう。

以下の3つの情報をSNS毎に設定ファイルに記載します。

  • client_id・・・クライアントID
  • client_secret・・・シークレットID
  • redirect・・・コールバックURL(認証後に遷移するページ)

/config/services.php

ここでは、必要な情報を格納する変数を設定します。
実際の設定値は、次の設定ファイル(.env)に記載します。

.env

実際の値は[.env]ファイルに記載します。

Socialiteパッケージのインストール

LaravelGitHubにも入っているパッケージSocialite」をインストールしてソーシャルログイン認証を行います。

GitHub
GitHub - laravel/socialite: Laravel wrapper around OAuth 1 & OAuth 2 libraries. Laravel wrapper around OAuth 1 & OAuth 2 libraries. - laravel/socialite

まずは、いつも通り[composer require]します。

Socialiteを有効にする

次に、設定ファイルのprovidersaliasesに[Socialite]追記します。

/config/app.php

これでSocialiteの準備は完了です。

SNSアカウント用のテーブル作成

SNSアカウントログインする場合は、パスワード(場合によってはメールアドレス)が不要になるので、既存のUsersテーブルを変更しなければなりません。
変更するためにはDoctrinedbalDatabase Abstraction Layer)なるものが必要らしいです。(ココちょっとハマった)

GitHub
GitHub - doctrine/dbal: Doctrine Database Abstraction Layer Doctrine Database Abstraction Layer. Contribute to doctrine/dbal development by creating an account on GitHub.

これも[composer require]します。

次に、Usersテーブルを変更するためのLaravel標準のマイグレーションファイルを作成し、

以下のように書きます。

/database/migrations/…_update_users_table.php

ここまででUsersテーブルを変更する準備が完了しました。
次は、Usersテーブルと紐付くSNSアカウントの情報を登録するテーブルモデルを作成していきます。
ここもコマンドでパパっと!

モデルと一緒にマイグレーションファイルも以下のように作成します。

/database/migrations/…_create_social_accounts_table.php

/app/SocialAccount.php

これでソーシャルログイン認証の準備が整いました。

ソーシャルログイン認証処理を追記

通常のログインコントローラーソーシャルログイン認証処理を付け加えます。

/app/Http/Controllers/LoginController.php

[redirectToProvider($provider)]で各SNSログイン認証画面へリダイレクトさせ、[handleProviderCallback($provider)]で帰ってきた値を利用して登録orログインを行います。

/routes/web.php

最後にルートを追加して完了です。

{provider}に”google“や”facebook“が入ります。リンクはこんな感じ。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次