##環境
利用するツールのバージョンなど。
- 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](中ほどのClient OAuth Settings)に必要な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();
}
}
###その他
独自ドライバの実装についてはこちらをご覧ください。