PHP code example of misarji / zend-oauth2

1. Go to this page and download the library: Download misarji/zend-oauth2 library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

misarji / zend-oauth2 example snippets


return array(
	'modules' => array(
		// ...
		'ZendOAuth2',
	),
	// ...
);

public function callbackAction()
{

    $me = $this->getServiceLocator()->get('ZendOAuth2\Google');
    //$me = $this->getServiceLocator()->get('ZendOAuth2\Github');
    //$me = $this->getServiceLocator()->get('ZendOAuth2\Facebook');
    //$me = $this->getServiceLocator()->get('ZendOAuth2\LinkedIn');

    if (strlen($this->params()->fromQuery('code')) > 10) {
    	
    	if($me->getToken($this->request)) {
    		$token = $me->getSessionToken(); // token in session
    	} else {
    		$token = $me->getError(); // last returned error (array)
    	}
        
        $info = $me->getInfo();
        
    } else {
    
        $url = $me->getUrl();
        
    }

    return array('token' => $token, 'info' => $info, 'url' => $url);

}

public function callbackAction()
{

    $me = $this->getServiceLocator()->get('ZendOAuth2\Google');
    //$me = $this->getServiceLocator()->get('ZendOAuth2\Github');
    //$me = $this->getServiceLocator()->get('ZendOAuth2\Facebook');
    //$me = $this->getServiceLocator()->get('ZendOAuth2\LinkedIn');

	$me->getOptions()->setScope(array('email', 'user'));
	$me->getOptions()->setAuthUri('http://google.com/');
	$me->getOptions()->setTokenUri('http://google.com/');
	$me->getOptions()->setInfoUri('http://google.com/');
	$me->getOptions()->setClientId('my-id.com');
	$me->getOptions()->setClientSecret('my-secret');
	$me->getOptions()->setRedirectUri('http://my-server.com/');

}

public function authGithubAction() // controller action
{

    $me = $this->getServiceLocator()->get('ZendOAuth2\Github');

    $auth = new AuthenticationService(); // zend
    
    if (strlen($this->params()->fromQuery('code')) > 10) {
         
        if($me->getToken($this->request)) { // if getToken is true, the user has authenticated successfully by the provider, not yet by us.
            $token = $me->getSessionToken(); // token in session
        } else {
            $token = $me->getError(); // last returned error (array)
        }
        
        $adapter = $this->getServiceLocator()->get('ZendOAuth2\Auth\Adapter'); // added in module.config.php
        $adapter->setOAuth2Client($me); // $me is the oauth2 client
        $rs = $auth->authenticate($adapter); // provides an eventManager 'oauth2.success'
        
        if (!$rs->isValid()) {
            foreach ($rs->getMessages() as $message) {
                echo "$message\n";
            }
            echo 'no valid';
        } else {
            echo 'valid';
        }

    } else {
        $url = $me->getUrl();
    }

    $view = new ViewModel(array('token' => $token, 'info' => $info, 'url' => $url, 'error' => $me->getError()));
    
    return $view;

}

public function onBootstrap(Event $e)
{
    /* Some bad code here, only for demo purposes. */
    $userTable = new UserTable($e->getApplication()->getServiceManager()->get('Zend\Db\Adapter\Adapter')); // my user table
    $e->getApplication()->getServiceManager()->get('ZendOAuth2\Auth\Adapter')->getEventManager() // the the adapters eventmanager
        ->attach('oauth2.success', //attach to the event
            function($e) use ($userTable){
                
                $params = $e->getParams(); //print_r($params); so you see whats in if
                
                if($user = $userTable->getUserByRemote($params['provider'], $params['info']['id'])) { // check for user from facebook with id 1000
    
                    $user->token = $params['token']['access_token'];
                    $expire = (isset($params['token']['expires'])) ? $params['token']['expires'] : 3600;
                    $user->token_valid = new \Zend\Db\Sql\Expression('DATE_ADD(NOW(), INTERVAL '.$expire.' SECOND)');
                    $user->date_update = new \Zend\Db\Sql\Expression('NOW()');
                    
                    $userTable->saveUser($user);
                                    
                } else {
                    
                    $user = new User;
                    $user->token = $params['token']['access_token'];
                    $expire = (isset($params['token']['expires'])) ? $params['token']['expires'] : 3600;
                    $user->token_valid = new \Zend\Db\Sql\Expression('DATE_ADD(NOW(), INTERVAL '.$expire.' SECOND)');
                    $user->date_update = new \Zend\Db\Sql\Expression('NOW()');
                    $user->date_create = new \Zend\Db\Sql\Expression('NOW()');
                    $user->remote_source = $params['provider'];
                    $user->remote_id = $params['info']['id'];
                    $user->name = $params['info']['name'];
                    $user->info = \Zend\Json\Encoder::encode($params['info']);
                    
                    $userTable->saveUser($user);
                    
                }
                
                $user = $userTable->getUserByRemote($params['provider'], $params['info']['id']);
                $params['info'] = $user->getArrayCopy();
                $params['info']['info'] = false;
    
    			// here the params info is rewitten. The result object returned from the auth object will have the db row.
    			
    			$params['code'] = \Zend\Authentication\Result::FAILURE; // this would deny authentication. default is \Zend\Authentication\Result::SUCCESS.
    
            });

}
bash
$ php composer.phar update