タイトル: ソーシャルログインの実装
本稿はLaravelのソーシャルログインの実装に関する記事です。
Socialiteのインストール
composer require laravel/socialite |
config/app.phpの設定
「providers」と「aliases」に以下の記述を追記する。
'providers' => [
|
.envの設定
独自のSNSのkey情報などを記載する。
※各SNSでのkeyの取得やコールバックURLの設定に関しては他の記事を参照してください。
Google OAuthはこちらを参照。
各SNSのコールバックURLは以下の通りにして下さい。
https://~.com/social/callback/google
https://~.com/social/callback/twitter
GOOGLE_CLIENT_ID="..." TWITTER_KEY="..." SESSION_DOMAIN=~.com |
SESSION_DOMAINを記述しておかないと、callback url 呼び出し時に「Laravel\Socialite\Two\InvalidStateException」が発生します。
config/service.phpの設定
先ほど.envに設定した値を使用する。
'google' => [ |
Usersテーブルの定義変更
ソーシャルログインの場合、emailとpasswordカラムを使用しないのでnot null制約を外す必要がある。
migration機能もしくは直接修正すればよい。
migrationを使用する場合は以下のパッケージをインストールする必要があるので注意。
composer require doctrine/dbal |
ルート設定
web.appに以下の記述を追記する。
Route::get('social/login/{provider}','SocialLoginController@login'); |
コントローラーの作成
「App\Http\Controllers\Auth\SocialLoginControllerを作成する」
<?php use App\Http\Controllers\Controller; use Log; use Socialite; class SocialLoginController extends Controller public function callback($provider) log::info(var_export($socialUser, true)); ...後続処理 } |
「log::info(var_export($socialUser, true))」の部分でレスポンスを確認できます。
あとはIDを見て存在すればログイン処理、存在しなければユーザ登録処理などに繋ぎましょう。
ID管理にuserテーブルにgoogle_idやtwitter_idカラムを追加するのもありです。
ログイン処理およびユーザー新規登録の実装例
以下、実装例を記載します。
userテーブルにgoogle_idおよびtwitter_idカラムを追加します。適当にvarchar(300)ほどで追加しましょう。nullを許容することを忘れずに。
続けて、コントローラーを以下の様に書き換えます。
<?php use App\Http\Controllers\Controller; class SocialLoginController extends Controller public function callback($provider) case "twitter": } catch (Exception $e) { |