前回、英語で記事を書いてみたので、その記事の日本語バージョンです。

RedirectController

まず、Facebook認証用のボタンを押下したらコントローラを呼び出します。

use Illuminate\Support\Str;

class OauthController
{
    public function redirectToFacebook()
    {
        $state = Str::random(32);
        session()->put('state', $state);
        $sendData = [
            "client_id" => 'client_id-xxxxx-xxxx',
            "redirect_url" => 'https://hogehoge.com/facebook/callback',
            "state" => $state,
            "response_type" => 'code',
        ];
        $url = 'https://www.facebook.com/v8.0/dialog/oauth?'.http_build_query($sendData);
        return redirect($url);
    }
}

CSRF対策のために、stateというセッションを登録します。

今回は32桁の乱数を設定しています。

次に、認証に必要なデータをqueryパラメータにセットして、認証ページにリダイレクトさせます。

CallbackController

次に、Facebookで認証した後に戻ってくるコントローラを書きます。

use Facebook\Facebook;
use Facebook\PersistentData\PersistentDataInterface;

class OauthController
{
...
    public function callbackFromFacebook(string $accessToken = null)
    {
        $facebook = new Facebook([
            'app_id' => FACEBOOK_APPLICATION_ID,
            'app_secret' => FACEBOOK_SECRET_ID,
            'default_graph_version' => 'v2.9',
            'persistent_data_handler' => new MyLaravelPersistentDataHandler(),
        ]);
        $helper = $facebook->getRedirectLoginHelper();
        if ($accessToken) {
            $accessToken = $helper->getAccessToken();
        }
        $response = $facebook->get('/me?fields=id', $accessToken);
        $user = $response->getGraphUser();
        $userId =$user->getId();
...
    }
}

class MyLaravelPersistentDataHandler implements PersistentDataInterface
{
    public function get($key) {
        return session()->get($key);
    }
    public function set($key, $value) {
        session()->put($key, $value);
    }
}

こんな感じです。

最初にFacebook-sdkを使ってオブジェクトを作成します。

次のgetRedirectLoginHelperですが、こちらはcsrfチェックとFacebookでサーバの認証しています。

getAccessTokenでは、データを取得する際に必要なアクセストークンを発行してくれます。

queryパラメータについている場合もあるので、なかった場合は発行する様に今回は記述しています。

そして、$facebook->get(‘/me?fields=id’, $accessToken);の部分でrequestを投げて必要な情報を取得してきます。

fieldsの部分にいろいろと設定することでfirst_name,family_nameなど様々な情報を取得できます。

その後、getGraphUserを使ってuserオブジェクトを作成して、getHogeメソッドでデータを取得します。

その後はDBにデータ登録するなりログイン処理するなりします。

 

参考ページはこちら

https://developers.facebook.com/docs/php/Facebook/5.0.0

https://developers.facebook.com/docs/php/PersistentDataInterface/5.0.0

カテゴリー: PHP

0件のコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です