From f49d16541cdc9c93fa6e64b6b6e13148a599ce8e Mon Sep 17 00:00:00 2001
From: Terry <2358269014@qq.com>
Date: Thu, 27 Jul 2017 17:13:00 +0800
Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=94=B9facebook=E7=99=BB=E5=BD=95?=
=?UTF-8?q?=E5=BA=93=E5=8C=85=E4=BB=A5=E5=8F=8A=E6=96=B9=E5=BC=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../controllers/FacebookController.php | 83 ++++++++++---------
.../controllers/FacebookController.php | 83 ++++++++++---------
.../Customer/controllers/GoogleController.php | 5 +-
composer.json | 3 +-
services/customer/Facebook.php | 44 +++-------
5 files changed, 104 insertions(+), 114 deletions(-)
diff --git a/app/appfront/modules/Customer/controllers/FacebookController.php b/app/appfront/modules/Customer/controllers/FacebookController.php
index 2e391f16..35a86fe7 100644
--- a/app/appfront/modules/Customer/controllers/FacebookController.php
+++ b/app/appfront/modules/Customer/controllers/FacebookController.php
@@ -9,10 +9,6 @@
namespace fecshop\app\appfront\modules\Customer\controllers;
-use Facebook\FacebookRedirectLoginHelper;
-use Facebook\FacebookRequest;
-use Facebook\FacebookRequestException;
-use Facebook\FacebookSession;
use fecshop\app\appfront\modules\AppfrontController;
use Yii;
@@ -23,57 +19,66 @@ use Yii;
class FacebookController extends AppfrontController
{
// http://fecshop.appfront.fancyecommerce.com/customer/facebook/loginv
-
/**
* facebook 账号在facebook确认后,返回网站的url地址。
*/
public function actionLoginv()
{
- Yii::$service->session->set('fbs', 1);
+ //Yii::$service->session->set('fbs', 1);
$thirdLogin = Yii::$service->store->thirdLogin;
$facebook_app_id = isset($thirdLogin['facebook']['facebook_app_id']) ? $thirdLogin['facebook']['facebook_app_id'] : '';
$facebook_app_secret = isset($thirdLogin['facebook']['facebook_app_secret']) ? $thirdLogin['facebook']['facebook_app_secret'] : '';
- FacebookSession::setDefaultApplication($facebook_app_id, $facebook_app_secret);
- $redirectUrl = Yii::$service->url->getUrl('customer/facebook/loginv');
- $helper = new FacebookRedirectLoginHelper($redirectUrl, $facebook_app_id, $facebook_app_secret);
+ $fb = new \Facebook\Facebook([
+ 'app_id' => $facebook_app_id,
+ 'app_secret' => $facebook_app_secret,
+ 'default_graph_version' => 'v2.10',
+ ]);
+ $helper = $fb->getRedirectLoginHelper();
+ if (isset($_GET['state'])) {
+ $helper->getPersistentDataHandler()->set('state', $_GET['state']);
+ }
try {
- $session = $helper->getSessionFromRedirect();
- } catch (FacebookRequestException $ex) {
- // When Facebook returns an error
- } catch (Exception $ex) {
+ $accessToken = $helper->getAccessToken();
+ } catch(\Facebook\Exceptions\FacebookResponseException $e) {
+ // When Graph returns an error
+ echo 'Graph returned an error: ' . $e->getMessage();
+ exit;
+ } catch(\Facebook\Exceptions\FacebookSDKException $e) {
// When validation fails or other local issues
+ echo 'Facebook SDK returned an error: ' . $e->getMessage();
+ exit;
+ }
+ if (! isset($accessToken)) {
+ if ($helper->getError()) {
+ header('HTTP/1.0 401 Unauthorized');
+ echo "Error: " . $helper->getError() . "\n";
+ echo "Error Code: " . $helper->getErrorCode() . "\n";
+ echo "Error Reason: " . $helper->getErrorReason() . "\n";
+ echo "Error Description: " . $helper->getErrorDescription() . "\n";
+ } else {
+ header('HTTP/1.0 400 Bad Request');
+ echo 'Bad request';
+ }
+ exit;
}
- //echo 1;
- //var_dump($session);
- // see if we have a session
- if (isset($session)) {
- // graph api request for user data
- $request = new FacebookRequest($session, 'GET', '/me');
- $response = $request->execute();
- // get response
- $graphObject = $response->getGraphObject();
- $fbid = $graphObject->getProperty('id'); // To Get Facebook ID
- $fbfullname = $graphObject->getProperty('name'); // To Get Facebook full name
- $femail = $graphObject->getProperty('email'); // To Get Facebook email ID
- /* ---- Session Variables -----*/
- $_SESSION['FBID'] = $fbid;
- $_SESSION['FULLNAME'] = $fbfullname;
- $_SESSION['EMAIL'] = $femail;
- $this->accountLogin();
+ $fb->setDefaultAccessToken($accessToken->getValue());
+ $response = $fb->get('/me?locale=en_US&fields=name,email');
+ $userNode = $response->getGraphUser();
+ $email = $userNode->getField('email');
+ $name = $userNode['name'];
+ $fbid = $userNode['id'];
+ if ($email) {
+ $this->accountLogin($fbid,$name,$email);
exit;
} else {
$loginUrl = $helper->getLoginUrl();
header('Location: '.$loginUrl);
}
}
-
// facebook账户登录
- public function accountLogin()
+ public function accountLogin($fbid,$name,$email)
{
- $fb_id = $_SESSION['FBID'];
- $full_name = $_SESSION['FULLNAME'];
- $email = $_SESSION['EMAIL'];
- $name_arr = explode(' ', $full_name);
+ $name_arr = explode(' ', $name);
$first_name = $name_arr[0];
$last_name = $name_arr[1];
$user = [
@@ -82,9 +87,9 @@ class FacebookController extends AppfrontController
'email' =>$email,
];
Yii::$service->customer->registerThirdPartyAccountAndLogin($user, 'facebook');
- echo '';
exit;
}
diff --git a/app/apphtml5/modules/Customer/controllers/FacebookController.php b/app/apphtml5/modules/Customer/controllers/FacebookController.php
index 6284624d..dad59d4b 100644
--- a/app/apphtml5/modules/Customer/controllers/FacebookController.php
+++ b/app/apphtml5/modules/Customer/controllers/FacebookController.php
@@ -9,10 +9,6 @@
namespace fecshop\app\apphtml5\modules\Customer\controllers;
-use Facebook\FacebookRedirectLoginHelper;
-use Facebook\FacebookRequest;
-use Facebook\FacebookRequestException;
-use Facebook\FacebookSession;
use fecshop\app\apphtml5\modules\AppfrontController;
use Yii;
@@ -23,43 +19,57 @@ use Yii;
class FacebookController extends AppfrontController
{
// http://fecshop.apphtml5.fancyecommerce.com/customer/facebook/loginv
-
/**
* facebook 账号在facebook确认后,返回网站的url地址。
*/
public function actionLoginv()
{
- Yii::$service->session->set('fbs', 1);
+ //Yii::$service->session->set('fbs', 1);
$thirdLogin = Yii::$service->store->thirdLogin;
$facebook_app_id = isset($thirdLogin['facebook']['facebook_app_id']) ? $thirdLogin['facebook']['facebook_app_id'] : '';
$facebook_app_secret = isset($thirdLogin['facebook']['facebook_app_secret']) ? $thirdLogin['facebook']['facebook_app_secret'] : '';
- FacebookSession::setDefaultApplication($facebook_app_id, $facebook_app_secret);
- $redirectUrl = Yii::$service->url->getUrl('customer/facebook/loginv');
- $helper = new FacebookRedirectLoginHelper($redirectUrl, $facebook_app_id, $facebook_app_secret);
+ $fb = new \Facebook\Facebook([
+ 'app_id' => $facebook_app_id,
+ 'app_secret' => $facebook_app_secret,
+ 'default_graph_version' => 'v2.10',
+ ]);
+ $helper = $fb->getRedirectLoginHelper();
+ if (isset($_GET['state'])) {
+ $helper->getPersistentDataHandler()->set('state', $_GET['state']);
+ }
try {
- $session = $helper->getSessionFromRedirect();
- } catch (FacebookRequestException $ex) {
- // When Facebook returns an error
- } catch (Exception $ex) {
+ $accessToken = $helper->getAccessToken();
+ } catch(\Facebook\Exceptions\FacebookResponseException $e) {
+ // When Graph returns an error
+ echo 'Graph returned an error: ' . $e->getMessage();
+ exit;
+ } catch(\Facebook\Exceptions\FacebookSDKException $e) {
// When validation fails or other local issues
+ echo 'Facebook SDK returned an error: ' . $e->getMessage();
+ exit;
+ }
+ if (! isset($accessToken)) {
+ if ($helper->getError()) {
+ header('HTTP/1.0 401 Unauthorized');
+ echo "Error: " . $helper->getError() . "\n";
+ echo "Error Code: " . $helper->getErrorCode() . "\n";
+ echo "Error Reason: " . $helper->getErrorReason() . "\n";
+ echo "Error Description: " . $helper->getErrorDescription() . "\n";
+ } else {
+ header('HTTP/1.0 400 Bad Request');
+ echo 'Bad request';
+ }
+ exit;
}
- //echo 1;
- //var_dump($session);
- // see if we have a session
- if (isset($session)) {
- // graph api request for user data
- $request = new FacebookRequest($session, 'GET', '/me');
- $response = $request->execute();
- // get response
- $graphObject = $response->getGraphObject();
- $fbid = $graphObject->getProperty('id'); // To Get Facebook ID
- $fbfullname = $graphObject->getProperty('name'); // To Get Facebook full name
- $femail = $graphObject->getProperty('email'); // To Get Facebook email ID
- /* ---- Session Variables -----*/
- $_SESSION['FBID'] = $fbid;
- $_SESSION['FULLNAME'] = $fbfullname;
- $_SESSION['EMAIL'] = $femail;
- $this->accountLogin();
+ $fb->setDefaultAccessToken($accessToken->getValue());
+ $response = $fb->get('/me?locale=en_US&fields=name,email');
+ $userNode = $response->getGraphUser();
+ $email = $userNode->getField('email');
+ $name = $userNode['name'];
+ $fbid = $userNode['id'];
+ //echo $email.$name.$fbid;exit;
+ if ($email) {
+ $this->accountLogin($fbid,$name,$email);
exit;
} else {
$loginUrl = $helper->getLoginUrl();
@@ -68,12 +78,9 @@ class FacebookController extends AppfrontController
}
// facebook账户登录
- public function accountLogin()
+ public function accountLogin($fbid,$name,$email)
{
- $fb_id = $_SESSION['FBID'];
- $full_name = $_SESSION['FULLNAME'];
- $email = $_SESSION['EMAIL'];
- $name_arr = explode(' ', $full_name);
+ $name_arr = explode(' ', $name);
$first_name = $name_arr[0];
$last_name = $name_arr[1];
$user = [
@@ -82,9 +89,9 @@ class FacebookController extends AppfrontController
'email' =>$email,
];
Yii::$service->customer->registerThirdPartyAccountAndLogin($user, 'facebook');
- echo '';
exit;
}
diff --git a/app/apphtml5/modules/Customer/controllers/GoogleController.php b/app/apphtml5/modules/Customer/controllers/GoogleController.php
index 4fb88989..cb420b80 100644
--- a/app/apphtml5/modules/Customer/controllers/GoogleController.php
+++ b/app/apphtml5/modules/Customer/controllers/GoogleController.php
@@ -66,10 +66,7 @@ class GoogleController extends AppfrontController
Yii::$service->customer->registerThirdPartyAccountAndLogin($user, 'google');
echo '';
exit;
}
diff --git a/composer.json b/composer.json
index b2909f02..0fbc4429 100644
--- a/composer.json
+++ b/composer.json
@@ -29,6 +29,7 @@
"yiisoft/yii2-mongodb": "~2.1.0" ,
"skeeks/yii2-assets-auto-compress": "*",
"ramsey/uuid": "*",
+ "facebook/graph-sdk": "*",
"hightman/xunsearch": "*@beta"
},
"autoload": {
@@ -37,6 +38,6 @@
}
},
"config": {
- "process-timeout": 1800
+ "process-timeout": 1800
}
}
diff --git a/services/customer/Facebook.php b/services/customer/Facebook.php
index 97479006..51ae3398 100644
--- a/services/customer/Facebook.php
+++ b/services/customer/Facebook.php
@@ -9,8 +9,6 @@
namespace fecshop\services\customer;
-use Facebook\FacebookRedirectLoginHelper;
-use Facebook\FacebookSession;
use fecshop\services\Service;
use Yii;
@@ -24,39 +22,21 @@ class Facebook extends Service
public $facebook_app_id;
public $facebook_app_secret;
- public function initParam()
- {
- $store = Yii::$service->store->store;
- if (isset($store['thirdLogin']['facebook']['facebook_app_secret'])) {
- $this->facebook_app_secret = $store['thirdLogin']['facebook']['facebook_app_secret'];
- }
- if (isset($store['thirdLogin']['facebook']['facebook_app_id'])) {
- $this->facebook_app_id = $store['thirdLogin']['facebook']['facebook_app_id'];
- }
- }
-
// 得到facebook登录的url。
public function getLoginUrl($urlKey)
{
- $this->initParam();
- session_start();
- $thirdLogin = Yii::$service->store->thirdLogin;
- $this->facebook_app_id = isset($thirdLogin['facebook']['facebook_app_id']) ? $thirdLogin['facebook']['facebook_app_id'] : '';
+ $redirectUrl = Yii::$service->url->getUrl($urlKey);
+ $thirdLogin = Yii::$service->store->thirdLogin;
+ $this->facebook_app_id = isset($thirdLogin['facebook']['facebook_app_id']) ? $thirdLogin['facebook']['facebook_app_id'] : '';
$this->facebook_app_secret = isset($thirdLogin['facebook']['facebook_app_secret']) ? $thirdLogin['facebook']['facebook_app_secret'] : '';
-
- if ($this->facebook_app_secret && $this->facebook_app_id) {
- //echo $this->facebook_app_secret;
- //echo $this->facebook_app_id;
- FacebookSession::setDefaultApplication($this->facebook_app_id, $this->facebook_app_secret);
- $redirectUrl = Yii::$service->url->getUrl($urlKey);
- //echo $redirectUrl;exit;
- $facebook = new FacebookRedirectLoginHelper($redirectUrl, $this->facebook_app_id, $this->facebook_app_secret);
-
- $facebook_login_url = $facebook->getLoginUrl([
- 'req_perms' => 'email,publish_stream',
- ]);
-
- return $facebook_login_url;
- }
+ $fb = new \Facebook\Facebook([
+ 'app_id' => $this->facebook_app_id,
+ 'app_secret' => $this->facebook_app_secret,
+ 'default_graph_version' => 'v2.10',
+ ]);
+ $helper = $fb->getRedirectLoginHelper();
+ $permissions = ['email']; // Optional permissions
+ $loginUrl = $helper->getLoginUrl($redirectUrl, $permissions);
+ return $loginUrl;
}
}
--
GitLab