{
    "componentChunkName": "component---src-templates-blog-post-jsx",
    "path": "/post/facebook-login-with-php/",
    "result": {"data":{"site":{"siteMetadata":{"title":"WEB EGG","author":"Leko - CTO at Yuimedi"}},"markdownRemark":{"id":"1d3df93c-331e-50cf-b669-27d442aba571","excerpt":"こんにちは。 先日、友達がシステムの実装を行なっている時に、 「phpでFacebookでログインを実装したいけど詰まった」と言っていまして、 そんな難しいものでもないだろうと思ったら、そのとおり簡単だったのですが 調べる事も結構ありましたので、 備忘録として、ここに残しておきます。 Facebook-php-sdk…","html":"<p>こんにちは。<br>\n先日、友達がシステムの実装を行なっている時に、</p>\n<p>「phpでFacebookでログインを実装したいけど詰まった」と言っていまして、</p>\n<p>そんな難しいものでもないだろうと思ったら、そのとおり簡単だったのですが</p>\n<p>調べる事も結構ありましたので、</p>\n<p>備忘録として、ここに残しておきます。</p>\n<!--more-->\n<h2 id=\"facebook-php-sdkを用意\" style=\"position:relative;\"><a href=\"#facebook-php-sdk%E3%82%92%E7%94%A8%E6%84%8F\" aria-label=\"facebook php sdkを用意 permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Facebook-php-sdkを用意</h2>\n<p>有難いことに、Facebook公式がsdkを公開してくれています。</p>\n<p>これがあるのと無いのでは天と地との差があります。</p>\n<p>さくっと手に入れてしまいましょう。</p>\n<p>リンクはこちら。<a href=\"https://github.com/facebook/facebook-php-sdk\" target=\"_blank\"><a href=\"https://github.com/facebook/Facebook-php-sdk\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https://github.com/facebook/Facebook-php-sdk</a></a></p>\n<p>上記のリンクをクリックして、「ZIP」をクリック。</p>\n<p>ダウンロードが始まるので、適当なディレクトリに解凍して、</p>\n<p>「src」フォルダとその中身を、Facebookでログインを使いたいphpファイルと同じ場所へ置いて下さい。</p>\n<p>これでOKです。次に行きましょう。</p>\n<h2 id=\"アプリケーションを作成\" style=\"position:relative;\"><a href=\"#%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E4%BD%9C%E6%88%90\" aria-label=\"アプリケーションを作成 permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>アプリケーションを作成</h2>\n<p>Facebookでログインをするには、ユーザ情報を得る元となるアプリケーションが必要になります。</p>\n<p>Twitterでも同様ですね。では早速作っていきます。</p>\n<p>ですが、アプリケーションの作成については多くの資料があり、</p>\n<p>まんまコピー&#x26;ペーストで出来たので参考にさせて頂いたリンクをご紹介します。あとはぐぐれ。</p>\n<ul>\n<li>PHP で「Login with Facebook」を実装する基本的な方法まとめ – 頭ん中<br>\n<a href=\"http://www.msng.info/archives/2012/10/facebook-login-with-php.php\" target=\"_blank\"><a href=\"http://www.msng.info/archives/2012/10/Facebook-login-with-php.php\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">http://www.msng.info/archives/2012/10/Facebook-login-with-php.php</a></a></li>\n</ul>\n<p>アプリケーションの作成は手順はやや多いですが、</p>\n<p>上記のサイト様を見ればすぐに分かると思います。</p>\n<p>アプリケーションが作成できたら、次へ進みましょう。</p>\n<h2 id=\"処理の流れ\" style=\"position:relative;\"><a href=\"#%E5%87%A6%E7%90%86%E3%81%AE%E6%B5%81%E3%82%8C\" aria-label=\"処理の流れ permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>処理の流れ</h2>\n<p>Facebook-php-sdkのソースを見れば、</p>\n<p>丁寧に書かれているので、分かると思うのですが、それじゃ備忘録にならないので書きます。笑</p>\n<p>ソース読むのに抵抗がある。</p>\n<p>という方もいると思うので、手順を噛み砕きます。</p>\n<p>必要なファイル構成</p>\n<p>まずこれを整えます。同じディレクトリに、srcとindex.phpを置きます。こんな感じ。</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">/\n    +- src（facebook-php-sdkのsrcです）\n    +- index.php</code></pre></div>\n<p>今回は、この構成で実装します。たったこれだけです。</p>\n<p>説明の前に、実際に動くサンプルを作りましたので、そちらを参考にしてみて下さい。</p>\n<p>ログインをして、ユーザ情報を表示するだけのサンプルです。</p>\n<p><a href=\"http://closet.leko.jp/2012/facebook_login/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">「facebookでログイン」動作サンプル</a></p>\n<p>サンプルを見ればなんとなく分かると思います。</p>\n<p>ログイン時には、</p>\n<p><strong>index.php -> Facebook -> アプリで設定したURLへリダイレクト(ログイン完了)</strong></p>\n<p>という順番になります。ログアウトするときは、</p>\n<p><strong>index.php -> Facebook -> 指定したURLへリダイレクト -> セッションをリセット -> ログアウト完了</strong></p>\n<p>と、少々手順が増えます。</p>\n<p>このような処理を実際に書いていきます。</p>\n<p>ただ、サンプルは無駄なものが多めに入っているので、最低限必要な機能だけを書いていきます。</p>\n<h2 id=\"いざ実装\" style=\"position:relative;\"><a href=\"#%E3%81%84%E3%81%96%E5%AE%9F%E8%A3%85\" aria-label=\"いざ実装 permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>いざ実装。</h2>\n<p>さて、お待ちかねの実装です。</p>\n<p>まずいじるファイルは「index.php」です。<br>\nindex.phpを開いて下記の内容を記入。</p>\n<p>**※&#x3C;?php</p>\n<p>の?の手前にスペースが空いていますが、削除して下さい。**</p>\n<div class=\"gatsby-highlight\" data-language=\"php\"><pre class=\"language-php\"><code class=\"language-php\"><span class=\"token php language-php\"><span class=\"token delimiter important\">&lt;?php</span>\n\n<span class=\"token comment\">// facebookSDKを読み込み</span>\n<span class=\"token keyword\">require_once</span><span class=\"token punctuation\">(</span><span class=\"token string double-quoted-string\">\"src/facebook.php\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// アプリの情報を$configに格納</span>\n<span class=\"token variable\">$config</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">array</span><span class=\"token punctuation\">(</span>\n  <span class=\"token string single-quoted-string\">'appId'</span> <span class=\"token operator\">=></span> <span class=\"token string double-quoted-string\">\"登録したアプリのID\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token string single-quoted-string\">'secret'</span> <span class=\"token operator\">=></span> <span class=\"token string double-quoted-string\">\"取得したアプリのsecret\"</span>\n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token variable\">$facebook</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Facebook</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$config</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token variable\">$user</span> <span class=\"token operator\">=</span> <span class=\"token variable\">$facebook</span><span class=\"token operator\">-></span><span class=\"token function\">getUser</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></span></code></pre></div>\n<p>まずはこれだけ。</p>\n<p>これで、もしindex.phpにアクセスしたユーザーがアプリにログインしていれば、</p>\n<p>$userにはユーザIDが入っています。</p>\n<p>ログインしている場合と、していない場合で処理を分けたいので、</p>\n<p>index.phpに下記を追加して下さい。</p>\n<div class=\"gatsby-highlight\" data-language=\"php\"><pre class=\"language-php\"><code class=\"language-php\"><span class=\"token comment\">// もしユーザがログインしていたら</span>\n<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span> <span class=\"token variable\">$user</span> <span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\t<span class=\"token comment\">// ログアウトURLを生成</span>\n\t<span class=\"token variable\">$logoutUrl</span> <span class=\"token operator\">=</span> <span class=\"token variable\">$facebook</span><span class=\"token operator\">-></span><span class=\"token function\">getLogoutUrl</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t<span class=\"token comment\">// ユーザ情報を取得</span>\n\t<span class=\"token variable\">$user_info</span> <span class=\"token operator\">=</span> <span class=\"token variable\">$facebook</span><span class=\"token operator\">-></span><span class=\"token function\">getUser</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t<span class=\"token comment\">// ログアウト用のリンクを出力</span>\n\t<span class=\"token keyword\">echo</span> <span class=\"token string double-quoted-string\">\"[ログアウト](\"</span><span class=\"token operator\">.</span><span class=\"token variable\">$logoutUrl</span><span class=\"token operator\">.</span><span class=\"token string double-quoted-string\">\")\"</span><span class=\"token punctuation\">;</span>\n\t<span class=\"token comment\">// ユーザ情報を出力</span>\n\t<span class=\"token function\">print_r</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$user_info</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n\t<span class=\"token comment\">// ログインURLを生成</span>\n\t<span class=\"token variable\">$loginUrl</span> <span class=\"token operator\">=</span> <span class=\"token variable\">$facebook</span><span class=\"token operator\">-></span><span class=\"token function\">getLoginUrl</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\t<span class=\"token keyword\">echo</span> <span class=\"token string double-quoted-string\">\"[facebookでログイン！](\"</span><span class=\"token operator\">.</span><span class=\"token variable\">$loginUrl</span><span class=\"token operator\">.</span><span class=\"token string double-quoted-string\">\")\"</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>実にシンプルですが、これで完了です。</p>\n<p>作成したindex.phpをサーバにアップロードして、アクセスしてみて下さい。</p>\n<p>いかがでしょうか。</p>\n<p>リファレンス通りにやった（言い訳）のですが、動かないなど何かしらの不具合が御座いましたら、</p>\n<p>コメントにてご一報よろしくお願い致します。</p>\n<p>ちなみに私はログアウトが上手く動かなかったため、上記のgetLogoutUrl()ではなく、</p>\n<p>自前でログアウト用のURLと、多少の処理を付け加えました。</p>\n<p>それについては、また別の記事として書きます。</p>","timeToRead":5,"frontmatter":{"title":"phpで「facebookでログイン」を実装するまで","tags":["Facebook","PHP"],"date":"November 21, 2012","featuredImage":{"childImageSharp":{"fluid":{"tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='159'%20viewBox='0%200%20400%20159'%20preserveAspectRatio='none'%3e%3cpath%20d='M0%2080v79h401V0H0v80m88-53c-3%201-6%204-6%208l-2%202-2%203%202%203c2%200%202%201%202%2010v10h4c5-1%205%200%205-13v-7h3c3%200%203%200%203-3%200-2-1-3-4-3-5%200-4-4%202-4%203%200%205-4%203-5-1-1-7-2-10-1m106%200l-1%2018v18h6l8%201c5%201%2010-2%2012-8%205-12-3-23-13-19l-4%202V27l-4-1-4%201m99%200l-1%2018v18h4l4-1v-5c1-6%202-6%206%200s4%206%209%206h5l-4-6-5-8%204-6%204-6h-5c-4%200-5%200-8%205l-5%204V27l-4-1-4%201M109%2037l-5%201c-1%200-2%201-2%203%200%203%200%203%205%202h7c4%201%204%203-2%203-7%201-11%203-12%206-3%208%206%2015%2013%2010h4l4%201h5v-9c0-10-1-14-4-16-3-1-11-2-13-1m35%200c-9%202-12%206-12%2014%200%209%209%2015%2020%2012%204-1%204-1%204-5s0-4-2-3c-3%202-9%202-11%200-3-2-2-8%200-10%202-3%207-3%2010-1s3%202%203%200c1-4%200-6-2-6-3-1-9-2-10-1m26%200c-7%202-10%206-10%2013%200%2010%209%2016%2022%2013%205-1%205-1%205-5%200-3%200-3-2-2-4%201-13%201-15-1-3-2-2-3%208-3h10l-1-4c0-9-8-14-17-11m64%200c-6%201-9%206-9%2013%200%206%200%207%203%2010%2010%208%2025%203%2025-10%200-10-8-16-19-13m33%200c-8%202-12%2011-9%2019%204%209%2018%2010%2024%203%209-11-1-26-15-22m-30%206c-5%202-5%2012%200%2014s7-1%207-7c-1-6-3-8-7-7m31%201c-2%202-3%208-1%2011s8%203%209-1c3-8-3-15-8-10m-65%200c-2%201-1%2013%201%2013%203%202%207-1%208-4%201-7-4-12-9-9m-56%2055v18l1%2016h9v-11l6-1c9-1%2013-4%2013-12%200-5-2-7-7-10-3-2-21-1-22%200m35%200v18l1%2016h9v-16h6l7%201v7l1%208h8V98h-9v13h-13V98h-5l-5%201m40%2016l1%2018h8v-6l1-5%206-1c9-1%2013-5%2013-13%200-7-6-10-19-10h-10v17'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e","aspectRatio":2.511278195488722,"src":"/static/3757e4c86f2ce3a97aedf76f2f17975d/741c1/featured-image.jpg","srcSet":"/static/3757e4c86f2ce3a97aedf76f2f17975d/466a3/featured-image.jpg 334w,\n/static/3757e4c86f2ce3a97aedf76f2f17975d/741c1/featured-image.jpg 604w","srcWebp":"/static/3757e4c86f2ce3a97aedf76f2f17975d/e33b9/featured-image.webp","srcSetWebp":"/static/3757e4c86f2ce3a97aedf76f2f17975d/cd98f/featured-image.webp 334w,\n/static/3757e4c86f2ce3a97aedf76f2f17975d/e33b9/featured-image.webp 604w","sizes":"(max-width: 604px) 100vw, 604px"}}}}}},"pageContext":{"slug":"/facebook-login-with-php/","previous":{"fields":{"slug":"/catalog/"},"frontmatter":{"title":"[DEBUG] All elements","tags":["Debug"]}},"next":{"fields":{"slug":"/eyecatch-with-wordpress/"},"frontmatter":{"title":"WordPressの投稿一覧にアイキャッチ画像を表示させたいときのメモ","tags":null}}}},
    "staticQueryHashes": ["2585454260","2954598359"]}