提交 f49d1654 编写于 作者: T Terry

更改facebook登录库包以及方式

上级 31676940
...@@ -9,10 +9,6 @@ ...@@ -9,10 +9,6 @@
namespace fecshop\app\appfront\modules\Customer\controllers; 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 fecshop\app\appfront\modules\AppfrontController;
use Yii; use Yii;
...@@ -23,57 +19,66 @@ use Yii; ...@@ -23,57 +19,66 @@ use Yii;
class FacebookController extends AppfrontController class FacebookController extends AppfrontController
{ {
// http://fecshop.appfront.fancyecommerce.com/customer/facebook/loginv // http://fecshop.appfront.fancyecommerce.com/customer/facebook/loginv
/** /**
* facebook 账号在facebook确认后,返回网站的url地址。 * facebook 账号在facebook确认后,返回网站的url地址。
*/ */
public function actionLoginv() public function actionLoginv()
{ {
Yii::$service->session->set('fbs', 1); //Yii::$service->session->set('fbs', 1);
$thirdLogin = Yii::$service->store->thirdLogin; $thirdLogin = Yii::$service->store->thirdLogin;
$facebook_app_id = isset($thirdLogin['facebook']['facebook_app_id']) ? $thirdLogin['facebook']['facebook_app_id'] : ''; $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'] : ''; $facebook_app_secret = isset($thirdLogin['facebook']['facebook_app_secret']) ? $thirdLogin['facebook']['facebook_app_secret'] : '';
FacebookSession::setDefaultApplication($facebook_app_id, $facebook_app_secret); $fb = new \Facebook\Facebook([
$redirectUrl = Yii::$service->url->getUrl('customer/facebook/loginv'); 'app_id' => $facebook_app_id,
$helper = new FacebookRedirectLoginHelper($redirectUrl, $facebook_app_id, $facebook_app_secret); 'app_secret' => $facebook_app_secret,
'default_graph_version' => 'v2.10',
]);
$helper = $fb->getRedirectLoginHelper();
if (isset($_GET['state'])) {
$helper->getPersistentDataHandler()->set('state', $_GET['state']);
}
try { try {
$session = $helper->getSessionFromRedirect(); $accessToken = $helper->getAccessToken();
} catch (FacebookRequestException $ex) { } catch(\Facebook\Exceptions\FacebookResponseException $e) {
// When Facebook returns an error // When Graph returns an error
} catch (Exception $ex) { echo 'Graph returned an error: ' . $e->getMessage();
exit;
} catch(\Facebook\Exceptions\FacebookSDKException $e) {
// When validation fails or other local issues // 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; $fb->setDefaultAccessToken($accessToken->getValue());
//var_dump($session); $response = $fb->get('/me?locale=en_US&fields=name,email');
// see if we have a session $userNode = $response->getGraphUser();
if (isset($session)) { $email = $userNode->getField('email');
// graph api request for user data $name = $userNode['name'];
$request = new FacebookRequest($session, 'GET', '/me'); $fbid = $userNode['id'];
$response = $request->execute(); if ($email) {
// get response $this->accountLogin($fbid,$name,$email);
$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();
exit; exit;
} else { } else {
$loginUrl = $helper->getLoginUrl(); $loginUrl = $helper->getLoginUrl();
header('Location: '.$loginUrl); header('Location: '.$loginUrl);
} }
} }
// facebook账户登录 // facebook账户登录
public function accountLogin() public function accountLogin($fbid,$name,$email)
{ {
$fb_id = $_SESSION['FBID']; $name_arr = explode(' ', $name);
$full_name = $_SESSION['FULLNAME'];
$email = $_SESSION['EMAIL'];
$name_arr = explode(' ', $full_name);
$first_name = $name_arr[0]; $first_name = $name_arr[0];
$last_name = $name_arr[1]; $last_name = $name_arr[1];
$user = [ $user = [
...@@ -82,9 +87,9 @@ class FacebookController extends AppfrontController ...@@ -82,9 +87,9 @@ class FacebookController extends AppfrontController
'email' =>$email, 'email' =>$email,
]; ];
Yii::$service->customer->registerThirdPartyAccountAndLogin($user, 'facebook'); Yii::$service->customer->registerThirdPartyAccountAndLogin($user, 'facebook');
echo '<script> echo '<script>
window.close(); window.close();
window.opener.location.reload(); window.opener.location.reload();
</script>'; </script>';
exit; exit;
} }
......
...@@ -9,10 +9,6 @@ ...@@ -9,10 +9,6 @@
namespace fecshop\app\apphtml5\modules\Customer\controllers; 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 fecshop\app\apphtml5\modules\AppfrontController;
use Yii; use Yii;
...@@ -23,43 +19,57 @@ use Yii; ...@@ -23,43 +19,57 @@ use Yii;
class FacebookController extends AppfrontController class FacebookController extends AppfrontController
{ {
// http://fecshop.apphtml5.fancyecommerce.com/customer/facebook/loginv // http://fecshop.apphtml5.fancyecommerce.com/customer/facebook/loginv
/** /**
* facebook 账号在facebook确认后,返回网站的url地址。 * facebook 账号在facebook确认后,返回网站的url地址。
*/ */
public function actionLoginv() public function actionLoginv()
{ {
Yii::$service->session->set('fbs', 1); //Yii::$service->session->set('fbs', 1);
$thirdLogin = Yii::$service->store->thirdLogin; $thirdLogin = Yii::$service->store->thirdLogin;
$facebook_app_id = isset($thirdLogin['facebook']['facebook_app_id']) ? $thirdLogin['facebook']['facebook_app_id'] : ''; $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'] : ''; $facebook_app_secret = isset($thirdLogin['facebook']['facebook_app_secret']) ? $thirdLogin['facebook']['facebook_app_secret'] : '';
FacebookSession::setDefaultApplication($facebook_app_id, $facebook_app_secret); $fb = new \Facebook\Facebook([
$redirectUrl = Yii::$service->url->getUrl('customer/facebook/loginv'); 'app_id' => $facebook_app_id,
$helper = new FacebookRedirectLoginHelper($redirectUrl, $facebook_app_id, $facebook_app_secret); 'app_secret' => $facebook_app_secret,
'default_graph_version' => 'v2.10',
]);
$helper = $fb->getRedirectLoginHelper();
if (isset($_GET['state'])) {
$helper->getPersistentDataHandler()->set('state', $_GET['state']);
}
try { try {
$session = $helper->getSessionFromRedirect(); $accessToken = $helper->getAccessToken();
} catch (FacebookRequestException $ex) { } catch(\Facebook\Exceptions\FacebookResponseException $e) {
// When Facebook returns an error // When Graph returns an error
} catch (Exception $ex) { echo 'Graph returned an error: ' . $e->getMessage();
exit;
} catch(\Facebook\Exceptions\FacebookSDKException $e) {
// When validation fails or other local issues // 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; $fb->setDefaultAccessToken($accessToken->getValue());
//var_dump($session); $response = $fb->get('/me?locale=en_US&fields=name,email');
// see if we have a session $userNode = $response->getGraphUser();
if (isset($session)) { $email = $userNode->getField('email');
// graph api request for user data $name = $userNode['name'];
$request = new FacebookRequest($session, 'GET', '/me'); $fbid = $userNode['id'];
$response = $request->execute(); //echo $email.$name.$fbid;exit;
// get response if ($email) {
$graphObject = $response->getGraphObject(); $this->accountLogin($fbid,$name,$email);
$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();
exit; exit;
} else { } else {
$loginUrl = $helper->getLoginUrl(); $loginUrl = $helper->getLoginUrl();
...@@ -68,12 +78,9 @@ class FacebookController extends AppfrontController ...@@ -68,12 +78,9 @@ class FacebookController extends AppfrontController
} }
// facebook账户登录 // facebook账户登录
public function accountLogin() public function accountLogin($fbid,$name,$email)
{ {
$fb_id = $_SESSION['FBID']; $name_arr = explode(' ', $name);
$full_name = $_SESSION['FULLNAME'];
$email = $_SESSION['EMAIL'];
$name_arr = explode(' ', $full_name);
$first_name = $name_arr[0]; $first_name = $name_arr[0];
$last_name = $name_arr[1]; $last_name = $name_arr[1];
$user = [ $user = [
...@@ -82,9 +89,9 @@ class FacebookController extends AppfrontController ...@@ -82,9 +89,9 @@ class FacebookController extends AppfrontController
'email' =>$email, 'email' =>$email,
]; ];
Yii::$service->customer->registerThirdPartyAccountAndLogin($user, 'facebook'); Yii::$service->customer->registerThirdPartyAccountAndLogin($user, 'facebook');
echo '<script> echo '<script>
window.close(); window.close();
window.opener.location.reload(); window.opener.location.reload();
</script>'; </script>';
exit; exit;
} }
......
...@@ -66,10 +66,7 @@ class GoogleController extends AppfrontController ...@@ -66,10 +66,7 @@ class GoogleController extends AppfrontController
Yii::$service->customer->registerThirdPartyAccountAndLogin($user, 'google'); Yii::$service->customer->registerThirdPartyAccountAndLogin($user, 'google');
echo '<script> echo '<script>
window.close(); window.close();
window.onunload = refreshParent; window.opener.location.reload();
function refreshParent() {
window.opener.location.reload();
}
</script>'; </script>';
exit; exit;
} }
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
"yiisoft/yii2-mongodb": "~2.1.0" , "yiisoft/yii2-mongodb": "~2.1.0" ,
"skeeks/yii2-assets-auto-compress": "*", "skeeks/yii2-assets-auto-compress": "*",
"ramsey/uuid": "*", "ramsey/uuid": "*",
"facebook/graph-sdk": "*",
"hightman/xunsearch": "*@beta" "hightman/xunsearch": "*@beta"
}, },
"autoload": { "autoload": {
...@@ -37,6 +38,6 @@ ...@@ -37,6 +38,6 @@
} }
}, },
"config": { "config": {
"process-timeout": 1800 "process-timeout": 1800
} }
} }
...@@ -9,8 +9,6 @@ ...@@ -9,8 +9,6 @@
namespace fecshop\services\customer; namespace fecshop\services\customer;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookSession;
use fecshop\services\Service; use fecshop\services\Service;
use Yii; use Yii;
...@@ -24,39 +22,21 @@ class Facebook extends Service ...@@ -24,39 +22,21 @@ class Facebook extends Service
public $facebook_app_id; public $facebook_app_id;
public $facebook_app_secret; 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。 // 得到facebook登录的url。
public function getLoginUrl($urlKey) public function getLoginUrl($urlKey)
{ {
$this->initParam(); $redirectUrl = Yii::$service->url->getUrl($urlKey);
session_start(); $thirdLogin = Yii::$service->store->thirdLogin;
$thirdLogin = Yii::$service->store->thirdLogin; $this->facebook_app_id = isset($thirdLogin['facebook']['facebook_app_id']) ? $thirdLogin['facebook']['facebook_app_id'] : '';
$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'] : ''; $this->facebook_app_secret = isset($thirdLogin['facebook']['facebook_app_secret']) ? $thirdLogin['facebook']['facebook_app_secret'] : '';
$fb = new \Facebook\Facebook([
if ($this->facebook_app_secret && $this->facebook_app_id) { 'app_id' => $this->facebook_app_id,
//echo $this->facebook_app_secret; 'app_secret' => $this->facebook_app_secret,
//echo $this->facebook_app_id; 'default_graph_version' => 'v2.10',
FacebookSession::setDefaultApplication($this->facebook_app_id, $this->facebook_app_secret); ]);
$redirectUrl = Yii::$service->url->getUrl($urlKey); $helper = $fb->getRedirectLoginHelper();
//echo $redirectUrl;exit; $permissions = ['email']; // Optional permissions
$facebook = new FacebookRedirectLoginHelper($redirectUrl, $this->facebook_app_id, $this->facebook_app_secret); $loginUrl = $helper->getLoginUrl($redirectUrl, $permissions);
return $loginUrl;
$facebook_login_url = $facebook->getLoginUrl([
'req_perms' => 'email,publish_stream',
]);
return $facebook_login_url;
}
} }
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册