laravelにソーシャルログイン機能を追加する(Socialite)
laravelのログインにソーシャルサイトのユーザー情報を使ったログイン機能を追加します。
下記を参考にしました。下記ではtwitterだけでなく色々なサイトに対応してます。
- インストール
- twitterのAPIキーの取得・設定
- ルーティングを追加する
- コントローラーの組み込み
今回はsocialiteを使用します。下記コマンドでパッケージをインストールします。
composer require laravel/socialite
今回はtwitterでログインを考えているのでtwitter用のパッケージをインストール
composer require socialiteproviders/twitter
twitterのdeveloper登録をする
下記より登録します。登録に1日とか数日かかる場合もあるので先にやる
プロバイダーを登録
下記ファイルに
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で読み込むようにするか直に記載,
],