ぬぬん!

やってみたこと,思ったこと

LaravelでFacebookログインとFacebookAPIを導入するまでの手順メモ

タイトル通り
FacebookログインとAPIを使うまで
もう調べたくないのでメモ
(でもきっとまた調べるんだろうな)

環境

Laravel5.8

Facebookログインを実装

Laravel側

socialiteproviders.netlify.com

基本的にココに書いてあるとおりでいける

任意で追加したのは

config/app.php

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

あとは表示のために

app/Http/Controllers/Auth/SocialLiteController.php

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

use App\Http\Controllers\Controller;
use Socialite;


class SocialLiteController extends Controller
{
    public function index()
    {
        return view('auth/index');
    }

    public function login()
    {
        return Socialite::driver('facebook')->redirect();
    }

    public function callback()
    {
        $user = Socialite::driver('facebook')->user();
        dd($user);
    }
}

route/web.php にルーティング

<?php

Route::get('/auth', 'Auth\SocialLiteController@index');
Route::get('/auth/login', 'Auth\SocialLiteController@login');
Route::get('/auth/callback', 'Auth\SocialLiteController@callback');

Facebookアプリ側

developers.facebook.com

ポチポチやるとアプリは作成できるので作成については割愛

アプリ画面から 設定>ベーシックの画面に行って

  • アプリID
  • app secret を取得して

Facebookログイン>設定の画面で

  • [ 有効なOAuthリダイレクトURI ] を設定しておく
    • 例の場合, /auth/callback

Facebook PHP SDK を入れる

stackoverflow.com

基本的にこれ通り

丁寧すぎて神

コマンドでFacebook PHP SDK を入れる

composer require facebook/graph-sdk

.env に追記(FACEBOOK_APP_ID,FACEBOOK_APP_SECRETはログインの時に設定した値と一緒なので書かない)

FACEBOOK_DEFAULT_GRAPH_VERSION=v2.8

config/facebook.phpを作成

<?php

return [
    'config' => [
        'app_id' => env('FACEBOOK_KEY', null),
        'app_secret' => env('FACEBOOK_SECRET', null),
        'default_graph_version' => env('FACEBOOK_DEFAULT_GRAPH_VERSION', 'v2.8'),
    ],
];

FacebookServiceProviderを作る

php artisan make:provider FacebookServiceProvider
<?php

namespace App\Providers;

use Facebook\Facebook;
use Illuminate\Support\ServiceProvider;

class FacebookServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
    }

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->singleton(Facebook::class, function ($app) {
            return new Facebook(config('facebook.config'));
        });
    }
}

config/app.php にprovider登録

    'providers' => [
    ...
        App\Providers\FacebookServiceProvider::class,
    ],

APIを使う

APIの使い方はdocumentから

developers.facebook.com

挙動確認程度なのでControllerにガツンと書いていきます

<?php

namespace App\Http\Controllers;

use App\User;
use Facebook\Facebook;

class HomeController extends Controller
{

    public function __construct(User $user, Facebook $facebook)
    {
        $this->user = $user;
        $this->facebook = $facebook;
    }

    public function index()
    {
        $this->facebook->setDefaultAccessToken($this->user->access_token);
        dd($this->facebook->get('/me')->getGraphUser()); // 自分の情報
        dd($this->facebook->get('/me/friends')->getGraphList()); // 友人一覧

    }
}

まとめ

動作確認したコード: GitHub - gomayumax/laravel58-test at facebook_auth

調べればできるって感じだった