function loginWithFacebook() { $fb_appid = Zend_Registry::get('config')->get('facebook_appid'); $fb_secret = Zend_Registry::get('config')->get('facebook_secret'); $fb = new Facebook\Facebook(['app_id' => $fb_appid, 'app_secret' => $fb_secret, 'default_graph_version' => 'v2.4']); $helper = $fb->getRedirectLoginHelper(); try { $accessToken = $helper->getAccessToken(); $_SESSION['fb_access_token'] = $accessToken; } 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; } try { // Get the Facebook\GraphNodes\GraphUser object for the current user. // If you provided a 'default_access_token', the '{access-token}' is optional. $response = $fb->get('/me?fields=id,name,email', $accessToken->getValue()); } 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; } $fb_user = $response->getGraphUser(); $fb_user_email = $fb_user['email']; $fb_user_display_name = mb_strtolower(preg_replace("/[^A-Za-z0-9]/", '', $fb_user['name']), 'UTF-8'); $defaultres = 64; $bigres = Zend_Registry::get('config')->get('avatar_size') ? Zend_Registry::get('config')->get('avatar_size') : $defaultres; $fb_avatar = 'https://graph.facebook.com/v2.0/' . $fb_user['id'] . '/picture?width=' . $bigres . '&height=' . $bigres; if (!$fb_user_email) { Zend_Controller_Action_HelperBroker::getStaticHelper('Redirector')->gotoUrl('/'); return; } $emailAuthAdapter = Application_Plugin_Common::getEmailAuthAdapter($fb_user_email); $auth = Zend_Auth::getInstance(); $authStorage = $auth->getStorage(); $result = $auth->authenticate($emailAuthAdapter); if ($result->isValid()) { $Profiles = new Application_Model_Profiles(); $user_db_data = $Profiles->getProfileByField('email', $fb_user_email); // clear identity - force logout Zend_Auth::getInstance()->clearIdentity(); // check if account is activated if (!$Profiles->isActivated($user_db_data->name)) { Application_Plugin_Alerts::error(Zend_Registry::get('Zend_Translate')->translate('Please activate your account first'), 'on'); // clear identity - force logout Zend_Auth::getInstance()->clearIdentity(); } elseif ($user_db_data->is_hidden) { Application_Plugin_Alerts::error(Zend_Registry::get('Zend_Translate')->translate('This account has been deleted or suspended'), 'off'); // clear identity - force logout Zend_Auth::getInstance()->clearIdentity(); } else { // everything ok, login user $user_data = $emailAuthAdapter->getResultRowObject(); Application_Plugin_Common::loginUser($user_data, $emailAuthAdapter, $authStorage); // trigger hooks $profile_id = $user_data->id; Zend_Registry::get('hooks')->trigger('hook_login', $profile_id); // flush url Zend_Controller_Action_HelperBroker::getStaticHelper('Redirector')->gotoUrl(''); } } else { // User must create account first... // save tmp facebook data to session $session = new Zend_Session_Namespace('Default'); $session->fb_user_email = $fb_user_email; $session->fb_user_display_name = $fb_user_display_name; $session->fb_avatar = $fb_avatar; // go to register with facebook Zend_Controller_Action_HelperBroker::getStaticHelper('Redirector')->gotoUrl('addons/' . basename(__DIR__) . '/?fb-register'); } }
/** * Lost password */ public function submitLostPasswordForm($form) { $front = Zend_Controller_Front::getInstance(); if ($form->isValid($_POST)) { $name = $form->getValue('name'); $Profiles = new Application_Model_Profiles(); $nameRow = $Profiles->getProfileByField('name', $name); // maybe user is entering email? $nameRow_byEmail = $Profiles->getProfileByField('email', $name); if ($nameRow_byEmail) { $nameRow = $Profiles->getProfileByField('name', $nameRow_byEmail->name); } if ($nameRow && $Profiles->isActivated($nameRow->name) && $nameRow->is_hidden == 0) { $resetPasswordKey = $Profiles->generateActivationKey($nameRow->email); $ProfilesMeta = new Application_Model_ProfilesMeta(); $profile = $ProfilesMeta->metaUpdate('password_reset', $resetPasswordKey, $nameRow->id); // password recovery email $ret = Application_Plugin_Common::sendRecoveryEmail($nameRow->email, $name, $resetPasswordKey); // show info message if ($ret) { Application_Plugin_Alerts::success(Zend_Registry::get('Zend_Translate')->translate('We have sent an email to your registered email address. Follow the instructions and you will be able to enter a new password.'), 'off'); } // flush url Zend_Controller_Action_HelperBroker::getStaticHelper('Redirector')->gotoUrl(''); } else { sleep(2); $form->getElement('name')->setErrors(array(Zend_Registry::get('Zend_Translate')->translate('Username does not exists'))); } } return $form; }