{"id":515,"date":"2015-09-10T14:47:32","date_gmt":"2015-09-10T06:47:32","guid":{"rendered":"https:\/\/www.webteach.tw\/?p=515"},"modified":"2015-09-10T14:47:32","modified_gmt":"2015-09-10T06:47:32","slug":"facebook-login","status":"publish","type":"post","link":"https:\/\/www.webteach.tw\/?p=515","title":{"rendered":"[ Facebook] &#8211; Facebook login \u6559\u5b78\u6587"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">\u672c\u7bc7\u662f Facebook login \u6559\u5b78\u6587 \u56e0FB\u7248\u672c\u66f4\u65b0\u6bd4\u8f03\u5feb\uff0c\u8acb\u4ee5Facebook Develope\u6587\u4ef6\u70ba\u4e3b\u3002<\/p>\n\n<p>\u88dc\u5145\uff1a 2016-08-09 \u82e5fb\u4f7f\u7528\u8005\u672c\u8eab\u7684mail\u672a\u8a8d\u8b49\u5373\u53d6\u4e0d\u5230 email \u7684\u503c\uff0c\u4f46user id \u9084\u662f\u6703\u56de\u50b3\uff0c\u795e\u5947\u7684\u662f\u82e5\u6709\u7b2c\u4e8c\u500bfb\u4f7f\u7528\u8005\u4e5f\u662femail\u672a\u9a57\u8b49\u7684\u5e33\u865f\u767b\u5165 \u56de\u50b3\u7684 user id \u90fd\u6703\u662f\u540c\u4e00\u500b\u3002<\/p>\n<p>\u524d\u7f6e\u4f5c\u696d\u8acb\u53c3\u8003\u4ee5\u4e0b\u7db2\u5740\uff1a<\/p>\n<p><a href=\"http:\/\/www.hareion.tk\/view\/209\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/www.hareion.tk\/view\/209<\/a><\/p>\n<p>fb_login.php \u767b\u5165\u9801\u9762<\/p>\n\n<pre class=\"wp-block-code\"><code>&lt;?php\nsession_start();\nrequire_once('.\/Facebook\/autoload.php');\n$fb = new Facebook\\Facebook(&#91;\n'app_id' => '7390***********',\/\/app_id\n'app_secret' => '582d6**************',\/\/app_\u5b89\u5168\u78bc\n'default_graph_version' => 'v2.4',\/\/\u9810\u8a2d\u7248\u672c\n]);\n$helper = $fb->getRedirectLoginHelper();\n$permissions = &#91;'email', 'user_likes']; \/\/ \u8981\u53d6\u5f97\u7684\u6b0a\u9650\n$loginUrl = $helper->getLoginUrl('http:\/\/\u7db2\u5740\/login-callback.php', $permissions);\/\/\u53d6\u5f97\u6b0a\u9650\u5f8c\u8981\u8df3\u8f49\u7684\u9801\u9762\nif(isset($_SESSION&#91;'fb_access_token'])){\ntry {\n\/\/ Returns a `Facebook\\FacebookResponse` object\n$response = $fb->get('\/me?fields=id,name,email', $_SESSION&#91;'fb_access_token']);\n\/\/\u53d6\u5f97\u767b\u5165\u8005\u7684 id,name,email(\u82e5fb\u4f7f\u7528\u8005\u672c\u8eab\u7684mail\u672a\u8a8d\u8b49\u5373\u53d6\u4e0d\u5230\u6b64\u503c\uff0c\u5373\u4fbf\u6709\u53d6\u5f97\u8a72\u4f7f\u7528\u8005\u7684mail\u6b0a\u9650)\n} catch(Facebook\\Exceptions\\FacebookResponseException $e) {\necho 'Graph returned an error: ' . $e->getMessage();\nexit;\n} catch(Facebook\\Exceptions\\FacebookSDKException $e) {\necho 'Facebook SDK returned an error: ' . $e->getMessage();\nexit;\n}\n$user = $response->getGraphUser();\necho 'Hi ~ ' . $user&#91;'name'];\necho ' - \u4f60\u5df2\u7d93\u767b\u5165\u4e86&lt;br\/>';\necho '&lt;a href=\"fb_logout.php\">Logout!&lt;\/a>';\n}else{\necho '&lt;a href=\"' . $loginUrl . '\">Log in with Facebook!&lt;\/a>';\n}\n?><\/code><\/pre>\n\n\n<p class=\"wp-block-paragraph\">login-callback.php \/\/\u767b\u5165\u5f8c\u7684\u8655\u7406\u9801\u9762<\/p>\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\nsession_start();\nrequire_once('.\/Facebook\/autoload.php');\n$fb = new Facebook\\Facebook(&#91;\n'app_id' => '7390***********',\/\/app_id\n'app_secret' => '582d6**************',\/\/app_\u5b89\u5168\u78bc\n'default_graph_version' => 'v2.4',\/\/\u9810\u8a2d\u7248\u672c\n]);\n$helper = $fb->getRedirectLoginHelper();\ntry {\n$accessToken = $helper->getAccessToken();\n} catch(Facebook\\Exceptions\\FacebookResponseException $e) {\n\/\/ When Graph returns an error\necho 'Graph returned an error: ' . $e->getMessage();\nexit;\n} catch(Facebook\\Exceptions\\FacebookSDKException $e) {\n\/\/ When validation fails or other local issues\necho 'Facebook SDK returned an error: ' . $e->getMessage();\nexit;\n}\nif (! isset($accessToken)) {\nif ($helper->getError()) {\nheader('HTTP\/1.0 401 Unauthorized');\necho \"Error: \" . $helper->getError() . \"\\n\";\necho \"Error Code: \" . $helper->getErrorCode() . \"\\n\";\necho \"Error Reason: \" . $helper->getErrorReason() . \"\\n\";\necho \"Error Description: \" . $helper->getErrorDescription() . \"\\n\";\n} else {\nheader('HTTP\/1.0 400 Bad Request');\necho 'Bad request';\n}\nexit;\n}\n\/\/ Logged in\necho '&lt;h3>Access Token&lt;\/h3>';\nvar_dump($accessToken->getValue());\/\/\u53d6\u5f97Token\n\/\/ The OAuth 2.0 client handler helps us manage access tokens\n$oAuth2Client = $fb->getOAuth2Client();\n\/\/ Get the access token metadata from \/debug_token\n$tokenMetadata = $oAuth2Client->debugToken($accessToken);\necho '&lt;h3>Metadata&lt;\/h3>';\nvar_dump($tokenMetadata);\n\/\/ Validation (these will throw FacebookSDKException's when they fail)\n$tokenMetadata->validateAppId('7390***********');\/\/app_id\n\/\/ If you know the user ID this access token belongs to, you can validate it here\n\/\/$tokenMetadata->validateUserId('123');\n$tokenMetadata->validateExpiration();\nif (! $accessToken->isLongLived()) {\n\/\/ Exchanges a short-lived access token for a long-lived one\ntry {\n$accessToken = $oAuth2Client->getLongLivedAccessToken($accessToken);\/\/\u53d6\u5f97\u9577\u671fToken\n} catch (Facebook\\Exceptions\\FacebookSDKException $e) {\necho \"&lt;p>Error getting long-lived access token: \" . $helper->getMessage() . \"&lt;\/p>\\n\\n\";\nexit;\n}\necho '&lt;h3>Long-lived&lt;\/h3>';\nvar_dump($accessToken->getValue());\n$ab=$accessToken->getValue();\n}\n$_SESSION&#91;'fb_access_token'] = (string) $accessToken; \/\/\u5c07Token\u5beb\u5165session\u88e1\n\/\/ User is logged in with a long-lived access token.\n\/\/ You can redirect them to a members-only page.\n\/\/header('Location: https:\/\/example.com\/members.php');\n?><\/code><\/pre>\n\n\n<p class=\"wp-block-paragraph\">fb_logout.php \u767b\u51fa\u9801\u9762<\/p>\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php session_start();\nsession_destroy();\nHeader(\"location:fb_login.php\");\n?><\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u672c\u7bc7\u662f Facebook login \u6559\u5b78\u6587 \u56e0FB\u7248\u672c\u66f4\u65b0\u6bd4\u8f03\u5feb\uff0c\u8acb\u4ee5Facebook Develope\u6587\u4ef6\u70ba\u4e3b\u3002<\/p>\n","protected":false},"author":1,"featured_media":1863,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24,36],"tags":[249,253,377],"class_list":["post-515","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-facebook","category-php","tag-facebook","tag-fb","tag-login","hvn-theme-has-thumbnail"],"_links":{"self":[{"href":"https:\/\/www.webteach.tw\/index.php?rest_route=\/wp\/v2\/posts\/515","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.webteach.tw\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.webteach.tw\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.webteach.tw\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.webteach.tw\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=515"}],"version-history":[{"count":0,"href":"https:\/\/www.webteach.tw\/index.php?rest_route=\/wp\/v2\/posts\/515\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.webteach.tw\/index.php?rest_route=\/wp\/v2\/media\/1863"}],"wp:attachment":[{"href":"https:\/\/www.webteach.tw\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=515"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.webteach.tw\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=515"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.webteach.tw\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=515"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}