前回、英語で記事を書いてみたので、その記事の日本語バージョンです。
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
0件のコメント