Esempio n. 1
0
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');
    }
}
Esempio n. 2
0
 /**
  * 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;
 }