提交 f49d1654 编写于 作者: T Terry

更改facebook登录库包以及方式

上级 31676940
......@@ -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 '<script>
window.close();
window.opener.location.reload();
echo '<script>
window.close();
window.opener.location.reload();
</script>';
exit;
}
......
......@@ -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 '<script>
window.close();
window.opener.location.reload();
echo '<script>
window.close();
window.opener.location.reload();
</script>';
exit;
}
......
......@@ -66,10 +66,7 @@ class GoogleController extends AppfrontController
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;
}
......
......@@ -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
}
}
......@@ -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;
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册