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);
     }
 }