{"id":684,"date":"2020-11-14T15:25:54","date_gmt":"2020-11-14T06:25:54","guid":{"rendered":"http:\/\/snow-cat.net\/?p=684"},"modified":"2021-09-13T12:50:46","modified_gmt":"2021-09-13T03:50:46","slug":"laravel%e3%81%a7facebook-sdk%e3%82%92%e4%bd%bf%e7%94%a8%e3%81%97%e3%81%a6oauth%e3%82%92%e5%ae%9f%e8%a3%85%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95","status":"publish","type":"post","link":"https:\/\/snow-cat.net\/?p=684","title":{"rendered":"Laravel\u3067facebook-sdk\u3092\u4f7f\u7528\u3057\u3066Oauth\u3092\u5b9f\u88c5\u3059\u308b\u65b9\u6cd5"},"content":{"rendered":"<p>\u524d\u56de\u3001\u82f1\u8a9e\u3067\u8a18\u4e8b\u3092\u66f8\u3044\u3066\u307f\u305f\u306e\u3067\u3001\u305d\u306e\u8a18\u4e8b\u306e\u65e5\u672c\u8a9e\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u3059\u3002<\/p>\n<h2>RedirectController<\/h2>\n<p>\u307e\u305a\u3001Facebook\u8a8d\u8a3c\u7528\u306e\u30dc\u30bf\u30f3\u3092\u62bc\u4e0b\u3057\u305f\u3089\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u3092\u547c\u3073\u51fa\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"lang:default decode:true\" title=\"redirect-facebook\">use Illuminate\\Support\\Str;\r\n\r\nclass OauthController\r\n{\r\n    public function redirectToFacebook()\r\n    {\r\n        $state = Str::random(32);\r\n        session()-&gt;put('state', $state);\r\n        $sendData = [\r\n            \"client_id\" =&gt; 'client_id-xxxxx-xxxx',\r\n            \"redirect_url\" =&gt; 'https:\/\/hogehoge.com\/facebook\/callback',\r\n            \"state\" =&gt; $state,\r\n            \"response_type\" =&gt; 'code',\r\n        ];\r\n        $url = 'https:\/\/www.facebook.com\/v8.0\/dialog\/oauth?'.http_build_query($sendData);\r\n        return redirect($url);\r\n    }\r\n}<\/pre>\n<p>CSRF\u5bfe\u7b56\u306e\u305f\u3081\u306b\u3001state\u3068\u3044\u3046\u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u767b\u9332\u3057\u307e\u3059\u3002<\/p>\n<p>\u4eca\u56de\u306f32\u6841\u306e\u4e71\u6570\u3092\u8a2d\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u6b21\u306b\u3001\u8a8d\u8a3c\u306b\u5fc5\u8981\u306a\u30c7\u30fc\u30bf\u3092query\u30d1\u30e9\u30e1\u30fc\u30bf\u306b\u30bb\u30c3\u30c8\u3057\u3066\u3001\u8a8d\u8a3c\u30da\u30fc\u30b8\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3055\u305b\u307e\u3059\u3002<\/p>\n<h2>CallbackController<\/h2>\n<p>\u6b21\u306b\u3001Facebook\u3067\u8a8d\u8a3c\u3057\u305f\u5f8c\u306b\u623b\u3063\u3066\u304f\u308b\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u3092\u66f8\u304d\u307e\u3059\u3002<\/p>\n<pre class=\"lang:default decode:true\">use Facebook\\Facebook;\r\nuse Facebook\\PersistentData\\PersistentDataInterface;\r\n\r\nclass OauthController\r\n{\r\n...\r\n    public function callbackFromFacebook(string $accessToken = null)\r\n    {\r\n        $facebook = new Facebook([\r\n            'app_id' =&gt; FACEBOOK_APPLICATION_ID,\r\n            'app_secret' =&gt; FACEBOOK_SECRET_ID,\r\n            'default_graph_version' =&gt; 'v2.9',\r\n            'persistent_data_handler' =&gt; new MyLaravelPersistentDataHandler(),\r\n        ]);\r\n        $helper = $facebook-&gt;getRedirectLoginHelper();\r\n        if ($accessToken) {\r\n            $accessToken = $helper-&gt;getAccessToken();\r\n        }\r\n        $response = $facebook-&gt;get('\/me?fields=id', $accessToken);\r\n        $user = $response-&gt;getGraphUser();\r\n        $userId =$user-&gt;getId();\r\n...\r\n    }\r\n}\r\n\r\nclass MyLaravelPersistentDataHandler implements PersistentDataInterface\r\n{\r\n    public function get($key) {\r\n        return session()-&gt;get($key);\r\n    }\r\n    public function set($key, $value) {\r\n        session()-&gt;put($key, $value);\r\n    }\r\n}<\/pre>\n<p>\u3053\u3093\u306a\u611f\u3058\u3067\u3059\u3002<\/p>\n<p>\u6700\u521d\u306bFacebook-sdk\u3092\u4f7f\u3063\u3066\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n<p>\u6b21\u306egetRedirectLoginHelper\u3067\u3059\u304c\u3001\u3053\u3061\u3089\u306fcsrf\u30c1\u30a7\u30c3\u30af\u3068Facebook\u3067\u30b5\u30fc\u30d0\u306e\u8a8d\u8a3c\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>getAccessToken\u3067\u306f\u3001\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u3059\u308b\u969b\u306b\u5fc5\u8981\u306a\u30a2\u30af\u30bb\u30b9\u30c8\u30fc\u30af\u30f3\u3092\u767a\u884c\u3057\u3066\u304f\u308c\u307e\u3059\u3002<\/p>\n<p>query\u30d1\u30e9\u30e1\u30fc\u30bf\u306b\u3064\u3044\u3066\u3044\u308b\u5834\u5408\u3082\u3042\u308b\u306e\u3067\u3001\u306a\u304b\u3063\u305f\u5834\u5408\u306f\u767a\u884c\u3059\u308b\u69d8\u306b\u4eca\u56de\u306f\u8a18\u8ff0\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u305d\u3057\u3066\u3001$facebook-&gt;get(&#8216;\/me?fields=id&#8217;, $accessToken);\u306e\u90e8\u5206\u3067request\u3092\u6295\u3052\u3066\u5fc5\u8981\u306a\u60c5\u5831\u3092\u53d6\u5f97\u3057\u3066\u304d\u307e\u3059\u3002<\/p>\n<p>fields\u306e\u90e8\u5206\u306b\u3044\u308d\u3044\u308d\u3068\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067first_name,family_name\u306a\u3069\u69d8\u3005\u306a\u60c5\u5831\u3092\u53d6\u5f97\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u305d\u306e\u5f8c\u3001getGraphUser\u3092\u4f7f\u3063\u3066user\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3057\u3066\u3001getHoge\u30e1\u30bd\u30c3\u30c9\u3067\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u3057\u307e\u3059\u3002<\/p>\n<p>\u305d\u306e\u5f8c\u306fDB\u306b\u30c7\u30fc\u30bf\u767b\u9332\u3059\u308b\u306a\u308a\u30ed\u30b0\u30a4\u30f3\u51e6\u7406\u3059\u308b\u306a\u308a\u3057\u307e\u3059\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u53c2\u8003\u30da\u30fc\u30b8\u306f\u3053\u3061\u3089<\/p>\n<p><a href=\"https:\/\/developers.facebook.com\/docs\/php\/Facebook\/5.0.0\">https:\/\/developers.facebook.com\/docs\/php\/Facebook\/5.0.0<\/a><\/p>\n<p><a href=\"https:\/\/developers.facebook.com\/docs\/php\/PersistentDataInterface\/5.0.0\">https:\/\/developers.facebook.com\/docs\/php\/PersistentDataInterface\/5.0.0<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u524d\u56de\u3001\u82f1\u8a9e\u3067\u8a18\u4e8b\u3092\u66f8\u3044\u3066\u307f\u305f\u306e\u3067\u3001\u305d\u306e\u8a18\u4e8b\u306e\u65e5\u672c\u8a9e\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u3059\u3002 RedirectControll [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[20],"tags":[],"class_list":["post-684","post","type-post","status-publish","format-standard","hentry","category-php"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pattVc-b2","jetpack-related-posts":[{"id":898,"url":"https:\/\/snow-cat.net\/?p=898","url_meta":{"origin":684,"position":0},"title":"amplify\u3067\u74b0\u5883\u69cb\u7bc9\u3057\u3066\u516c\u958b\u3059\u308b","author":"hiro","date":"2021\u5e742\u670814\u65e5","format":false,"excerpt":"\u6700\u8fd1\u7c21\u5358\u306aweb\u30b5\u30a4\u30c8\u306a\u3089amplify\u3067\u3084\u308a\u305f\u3044\u306a\u3068\u601d\u3063\u3066\u3044\u305f\u306e\u3067\u4f5c\u6210\u3057\u3066\u307f\u307e\u3057\u305f\u3002 \u57fa\u672c\u7684\u306awe\u2026","rel":"","context":"AWS","block_context":{"text":"AWS","link":"https:\/\/snow-cat.net\/?cat=16"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/snow-cat.net\/wp-content\/uploads\/2021\/02\/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88-2021-02-14-21.37.59-300x273.png?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":661,"url":"https:\/\/snow-cat.net\/?p=661","url_meta":{"origin":684,"position":1},"title":"Add facebook Oauth with facebook-sdk in laravel","author":"hiro","date":"2020\u5e7411\u67087\u65e5","format":false,"excerpt":"When I write code to authorize with facebook-sdk, \u2026","rel":"","context":"PHP","block_context":{"text":"PHP","link":"https:\/\/snow-cat.net\/?cat=20"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":993,"url":"https:\/\/snow-cat.net\/?p=993","url_meta":{"origin":684,"position":2},"title":"Laravel8\u306bvue.js\u3092\u8a2d\u5b9a\u3059\u308b\u65b9\u6cd5","author":"hiro","date":"2021\u5e745\u67083\u65e5","format":false,"excerpt":"\u73fe\u5728\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u9032\u3081\u3066\u3044\u308b\u306e\u3067\u3059\u304c\u3001vue\u3092\u5c0e\u5165\u3059\u308b\u65b9\u6cd5\u306f\u666e\u901a\u306bSPA\u3067\u4f5c\u6210\u3059\u308b\u65b9\u6cd5\u3068\u306f\u82e5\u5e72\u7570\u306a\u308b\u2026","rel":"","context":"JavaScript","block_context":{"text":"JavaScript","link":"https:\/\/snow-cat.net\/?cat=11"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":613,"url":"https:\/\/snow-cat.net\/?p=613","url_meta":{"origin":684,"position":3},"title":"Laravel\u3067model\u3092\u5909\u66f4\u3057\u3066migrate\u3057\u3066\u3082\u53cd\u6620\u3055\u308c\u306a\u3044\u5834\u5408\u306e\u5bfe\u5fdc","author":"hiro","date":"2020\u5e748\u67088\u65e5","format":false,"excerpt":"\u524d\u56de\u3001sqlite\u306b\u5909\u66f4\u3057\u305f\u3042\u3068\u3001model\u5909\u66f4\u3057\u3066migrate\u3057\u3066\u3082\u5b9f\u884c\u3055\u308c\u306a\u304f\u3066\u60c5\u5831\u304c\u306a\u304b\u306a\u304b\u2026","rel":"","context":"PHP","block_context":{"text":"PHP","link":"https:\/\/snow-cat.net\/?cat=20"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/snow-cat.net\/wp-content\/uploads\/2020\/08\/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88-2020-08-08-20.44.42-300x23.png?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":479,"url":"https:\/\/snow-cat.net\/?p=479","url_meta":{"origin":684,"position":4},"title":"vuex\u3067\u6700\u521d\u306b\u62bc\u3055\u3048\u3066\u304a\u304f\u30dd\u30a4\u30f3\u30c8","author":"hiro","date":"2020\u5e745\u670825\u65e5","format":false,"excerpt":"\u6700\u8fd1nuxt.js\u3092\u89e6\u3063\u3066\u3044\u3066vuex\u306b\u3064\u3044\u3066\u7406\u89e3\u3059\u308b\u307e\u3067\u3061\u3087\u3063\u3068\u6642\u9593\u304c\u304b\u304b\u3063\u305f\u306e\u3067\u3001\u30dd\u30a4\u30f3\u30c8\u3092\u6574\u7406\u2026","rel":"","context":"JavaScript","block_context":{"text":"JavaScript","link":"https:\/\/snow-cat.net\/?cat=11"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":947,"url":"https:\/\/snow-cat.net\/?p=947","url_meta":{"origin":684,"position":5},"title":"October\u3092Mac\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b","author":"hiro","date":"2021\u5e743\u670828\u65e5","format":false,"excerpt":"\u3053\u3093\u306b\u3061\u306f\u3001\u3086\u304d\u306d\u3053\u3067\u3059\u3002 \u7686\u3055\u3093\u306f\u666e\u6bb5CMS\u3092\u4f7f\u3063\u3066\u3044\u307e\u3059\u304b\uff1f \u4ee5\u524dwagtail\u3092\u89e6\u3063\u3066\u3044\u305f\u306e\u3067\u2026","rel":"","context":"PHP","block_context":{"text":"PHP","link":"https:\/\/snow-cat.net\/?cat=20"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/snow-cat.net\/wp-content\/uploads\/2021\/03\/qa-207x300.png?resize=350%2C200","width":350,"height":200},"classes":[]}],"_links":{"self":[{"href":"https:\/\/snow-cat.net\/index.php?rest_route=\/wp\/v2\/posts\/684","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/snow-cat.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/snow-cat.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/snow-cat.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/snow-cat.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=684"}],"version-history":[{"count":1,"href":"https:\/\/snow-cat.net\/index.php?rest_route=\/wp\/v2\/posts\/684\/revisions"}],"predecessor-version":[{"id":685,"href":"https:\/\/snow-cat.net\/index.php?rest_route=\/wp\/v2\/posts\/684\/revisions\/685"}],"wp:attachment":[{"href":"https:\/\/snow-cat.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=684"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/snow-cat.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=684"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/snow-cat.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=684"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}