この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:3
ページ更新者:guest
更新日時:2018-10-16 06:53:09

タイトル: ソーシャルログインの実装

本稿はLaravelのソーシャルログインの実装に関する記事です。

 

Socialiteのインストール

composer require laravel/socialite

 

config/app.phpの設定

providers」と「aliases」に以下の記述を追記する。

'providers' => [
       
Laravel\Socialite\SocialiteServiceProvider::class,
],


'aliases' => [
       
'Socialite' => Laravel\Socialite\Facades\Socialite::class,
],    

 

.envの設定

独自のSNSのkey情報などを記載する。

※各SNSでのkeyの取得やコールバックURLの設定に関しては他の記事を参照してください。

Google OAuthはこちらを参照。

各SNSのコールバックURLは以下の通りにして下さい。

https://~.com/social/callback/google

https://~.com/social/callback/twitter

GOOGLE_CLIENT_ID="..."
GOOGLE_CLIENT_SECRET="..."
GOOGLE_CALLBACKURL="https://~.com/social/callback/google"

TWITTER_KEY="..."
TWITTER_SECRET="..."
TWITTER_CALLBACKURL="https://~.com/social/callback/twitter"

SESSION_DOMAIN=~.com

SESSION_DOMAINを記述しておかないと、callback url 呼び出し時に「Laravel\Socialite\Two\InvalidStateException」が発生します。

 

config/service.phpの設定

先ほど.envに設定した値を使用する。

'google' => [
    'client_id'     => env('GOOGLE_CLIENT_ID'),
    'client_secret' => env('GOOGLE_CLIENT_SECRET'),
    'redirect'      => env('GOOGLE_CALLBACKURL'),
],
'twitter' => [
    'client_id'     => env('TWITTER_KEY'),
    'client_secret' => env('TWITTER_SECRET'),
    'redirect'      => env('TWITTER_CALLBACKURL'),
],

 

Usersテーブルの定義変更

ソーシャルログインの場合、emailpasswordカラムを使用しないのでnot null制約を外す必要がある。

migration機能もしくは直接修正すればよい。

migrationを使用する場合は以下のパッケージをインストールする必要があるので注意。

composer require doctrine/dbal

 

ルート設定

web.appに以下の記述を追記する。

Route::get('social/login/{provider}','SocialLoginController@login');
Route::get('social/callback/{provider}','SocialLoginController@callback');

 

コントローラーの作成

「App\Http\Controllers\Auth\SocialLoginControllerを作成する」

<?php
namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;

use Log;

use Socialite;

class SocialLoginController extends Controller
{
    public function
login($provider)
    {
        return
Socialite::driver($provider)->redirect();
    }

    public function callback($provider)
    {
        $socialUser =
Socialite::driver($provider)->user();

        log::info(var_export($socialUser, true));

...後続処理

    }
}

log::info(var_export($socialUser, true))」の部分でレスポンスを確認できます。

あとはIDを見て存在すればログイン処理、存在しなければユーザ名登録処理などに繋ぎましょう。

ID管理にuserテーブルにgoogle_idやtwitter_idカラムを追加するのもありです。