Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
20
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

@zaburo

LaravelでSocialiteでソーシャルログイン

環境

利用するツールのバージョンなど。

  • Laravel5.2
  • Socialite

実装するソーシャル

  • Facebook(とりあえず。随時追加予定)

ログインボタンは必要に応じてここを利用すると便利。

準備

基本適には、本家の解説通りにやればいい。めんどいのはどちらかというと各ソーシャルサービスのAPIの仕様の方。

インストール

composer.jsonいじって、updateでもいいけど、本家の通り、

composer require laravel/socialite

config/app.phpの編集

config/app.phpに下記の記述を追加。

provider

Laravel\Socialite\SocialiteServiceProvider::class,

aliase

'Socialite' => Laravel\Socialite\Facades\Socialite::class,

config/services.phpの編集

config/services.phpに下記を追記します。値は、静的に書いてもいいですが、.envに書きましょう。

'facebook' => [
    'client_id'     => env('FACEBOOK_ID'),
    'client_secret' => env('FACEBOOK_SECRET'),
    'redirect'      => env('FACEBOOK_CALLBACKURL'),
],

.envの例

#FACEBOOK
FACEBOOK_ID=1234567890
FACEBOOK_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
FACEBOOK_CALLBACKURL=http://localhost:8000/facebook/callback

注意1)

Facebookの開発者ページにてApp IDとApp Secretを調べ、client_id。client_secretとして記述します。

注意2)

なお、ネットのサンプルでredirect先URLをurl()ヘルパー関数で取得している例がありましたが、私の環境ではエラーとなったので、.envにてURLはフルパスで記述しました。

注意3)

コールバックURLにlocalhostを指定しているとFacebookでの認証時にエラーになります。これを避けるためには、facebookの開発者ページにて、

[Settings](左メニュー) -> [Advanced](上のタブ) -> Valid OAuth redirect URIsに必要なURLを記述します(ここではhttp://localhost:8000/)。

実装

Route

Route::group(['middleware' => 'web'], function () {

    //FBログイン(ボタンのリンク先)
    Route::get('facebook','FacebookController@facebookLogin');
    //認証後の戻りURL
    Route::get('facebook/callback','FacebookController@facebookCallback');

});

Controller

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;

//追加
use Laravel\Socialite\Contracts\Factory as Socialite;

class FacebookController extends Controller
{
    //
    protected $socialite;

    //コンストラクタ
    public function __construct(Socialite $socialite)
    {
        $this->socialite = $socialite;
    }

    //ログイン
    public function facebookLogin()
    {
        //facebookへリダイレクト
        return $this->socialite->driver('facebook')->redirect();
    }

    //コールバック
    public function facebookCallback()
    {
        //ユーザー情報を取得
        $fuser = $this->socialite->driver('facebook')->user();

        //各情報の取得
        $fuser->getId();
        $fuser->getName();
        $fuser->getEmail();

        //とりあえず表示
        return $fuser->getEmail();
    }
}

その他

独自ドライバの実装についてはこちらをご覧ください。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
20
Help us understand the problem. What are the problem?