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

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

本稿は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 Socialite;

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

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

        // OAuth Twoプロバイダ
        $token = $socialUser->token;
        $refreshToken = $socialUser->refreshToken; // not always provided
        $expiresIn = $socialUser->expiresIn;

        // OAuth Oneプロバイダ
        //$token = $socialUser->token;
        //$tokenSecret = $socialUser->tokenSecret;

        // 全プロバイダ
        $socialUser->getId();
        $socialUser->getNickname();
        $socialUser->getName();
        $socialUser->getEmail();
        $socialUser->getAvatar();
    }
}