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/ */
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
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.