Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

環境

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

  • 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();
    }
}

その他

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

zaburo
こんにちは。自分用のメモをだらだら公開しています。
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした