public function facebook_login() { $fbAppID = Configure::read('System.Facebook.AppID'); $fbSecret = Configure::read('System.Facebook.AppSecret'); FacebookSession::setDefaultApplication($fbAppID, $fbSecret); $helper = new FacebookJavaScriptLoginHelper(); try { $session = $helper->getSession(); } catch (FacebookRequestException $ex) { die('Error get FB session'); } catch (\Exception $ex) { die('Error get FB session'); } if ($session) { try { $user = new FacebookRequest($session, 'GET', '/me'); $user = $user->execute(); $user = $user->getGraphObject(GraphUser::className()); } catch (FacebookRequestException $e) { echo "Exception occured, code: " . $e->getCode(); echo " with message: " . $e->getMessage(); } } if (isset($user) && $user) { $fbid = $user->getProperty("id"); $email = $user->getProperty("email"); $firstName = $user->getProperty("first_name"); $lastName = $user->getProperty("last_name"); $user = $this->Users->find()->where(['facebook_id' => $fbid, 'status <>' => USER_STATUS_DELETED])->first(); if ($user) { // Has already login fb before => Allow to login $this->request->session()->write('Core.Users', $user); $this->redirect(['plugin' => 'admin', 'controller' => 'pages', 'action' => 'index']); } else { // Check email exist or not $user = $this->Users->find()->where(['email' => $email, 'status <>' => USER_STATUS_DELETED])->first(); if ($user) { //Exist Real account => not allow to login using facebook $this->Flash->success(__('This email exist in the system and cannot be using Facebook')); $this->redirect($this->referer()); } else { $userEntity = $this->Users->newEntity(); $userEntity->email = $email; $userEntity->facebook_id = $fbid; $userEntity->first_name = $firstName; $userEntity->last_name = $lastName; $userEntity->auth_token = \Core::randomCode(); $userEntity->status = USER_STATUS_ACTIVE; if ($this->Users->save($userEntity)) { $this->request->session()->write('Core.Users', $userEntity); $this->redirect($this->referer()); } else { $this->Flash->warning(__('Cannot create member account')); $this->redirect($this->referer()); } } } } else { $scope = ['email', 'public_profile']; $loginUrl = $helper->getLoginUrl($scope); $this->redirect($loginUrl); } }