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