Skip to content

Commit

Permalink
更改facebook登录库包以及方式
Browse files Browse the repository at this point in the history
  • Loading branch information
fancyecommerce committed Jul 27, 2017
1 parent 3167694 commit f49d165
Show file tree
Hide file tree
Showing 5 changed files with 104 additions and 114 deletions.
83 changes: 44 additions & 39 deletions app/appfront/modules/Customer/controllers/FacebookController.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -23,57 +19,66 @@
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 = [
Expand All @@ -82,9 +87,9 @@ public function accountLogin()
'email' =>$email,
];
Yii::$service->customer->registerThirdPartyAccountAndLogin($user, 'facebook');
echo '<script>
window.close();
window.opener.location.reload();
echo '<script>
window.close();
window.opener.location.reload();
</script>';
exit;
}
Expand Down
83 changes: 45 additions & 38 deletions app/apphtml5/modules/Customer/controllers/FacebookController.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -23,43 +19,57 @@
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();
Expand All @@ -68,12 +78,9 @@ public function actionLoginv()
}

// 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 = [
Expand All @@ -82,9 +89,9 @@ public function accountLogin()
'email' =>$email,
];
Yii::$service->customer->registerThirdPartyAccountAndLogin($user, 'facebook');
echo '<script>
window.close();
window.opener.location.reload();
echo '<script>
window.close();
window.opener.location.reload();
</script>';
exit;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,7 @@ public function accountLogin($full_name, $email)
Yii::$service->customer->registerThirdPartyAccountAndLogin($user, 'google');
echo '<script>
window.close();
window.onunload = refreshParent;
function refreshParent() {
window.opener.location.reload();
}
window.opener.location.reload();
</script>';
exit;
}
Expand Down
3 changes: 2 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
"yiisoft/yii2-mongodb": "~2.1.0" ,
"skeeks/yii2-assets-auto-compress": "*",
"ramsey/uuid": "*",
"facebook/graph-sdk": "*",
"hightman/xunsearch": "*@beta"
},
"autoload": {
Expand All @@ -37,6 +38,6 @@
}
},
"config": {
"process-timeout": 1800
"process-timeout": 1800
}
}
44 changes: 12 additions & 32 deletions services/customer/Facebook.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@

namespace fecshop\services\customer;

use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookSession;
use fecshop\services\Service;
use Yii;

Expand All @@ -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;
}
}

0 comments on commit f49d165

Please sign in to comment.