laravelにソーシャルログイン機能を追加する(Socialite)

未分類


laravelのログインにソーシャルサイトのユーザー情報を使ったログイン機能を追加します。

下記を参考にしました。下記ではtwitterだけでなく色々なサイトに対応してます。

https://qiita.com/manbolila/items/b64d0e9a9d42e4b8502c
  • インストール
  • twitterのAPIキーの取得・設定
  • ルーティングを追加する
  • コントローラーの組み込み

今回はsocialiteを使用します。下記コマンドでパッケージをインストールします。

composer require laravel/socialite

今回はtwitterでログインを考えているのでtwitter用のパッケージをインストール

composer require socialiteproviders/twitter

twitterのdeveloper登録をする

下記より登録します。登録に1日とか数日かかる場合もあるので先にやる

https://developer.twitter.com/en

プロバイダーを登録

下記ファイルに
config\app.php
下記を追加

'providers' => [
    \SocialiteProviders\Manager\ServiceProvider::class,   // 追加
],

イベントリスナーを登録

下記ファイルに
app\Providers\EventServiceProvider.php
下記を追加

protected $listen = [

     \SocialiteProviders\Manager\SocialiteWasCalled::class => [
            'SocialiteProviders\\Twitter\\TwitterExtendSocialite@handle',
      ],
];

ルーティングを追加

routes/web.php
に下記を追加します。

Route::prefix('login/{provider}')->where(['provider' => '(line|twitter|facebook|google|yahoo)'])->group(function(){
    Route::get('/', [App\Http\Controllers\LoginController::class, 'redirectToProvider'])->name('sns_login.redirect');
    Route::get('/callback', [App\Http\Controllers\LoginController::class, 'handleProviderCallback'])->name('sns_login.callback');
});

コントローラーの作成

laravel8.x系ではログインコントローラーが作れないので作成

API情報を追加

\config\service.phpに記載

    'twitter' => [
        'client_id' => .envで読み込むようにするか直に記載,
        'client_secret' => .envで読み込むようにするか直に記載,
        'redirect' => .envで読み込むようにするか直に記載,
    ],