1. Go to this page and download the library: Download takman1/phalcon-jwt-auth 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/ */
takman1 / phalcon-jwt-auth example snippets
use Phalcon\Config;
/** @var Config $config */
return $config->merge(new Config([
'myapi-auth' => [
'secretKey' => $_SERVER['API_JWT_SECRET_KEY'], // secretKey comes from .env file (or ENV variables)
'session-token-name' => 'myapi-jwt-token', // token name in session
'payload' => [
'exp' => 10, // in minutes
'iss' => 'myapi-jwt-auth'
],
'ignoreUri' => [
'/',
'/api',
'/api/login',
'/api/logout',
]
]
]));
$di->setShared(
'dispatcher',
function () use ($di) {
/** @var \Phalcon\Events\ManagerInterface $eventsManager */
$eventsManager = $di->getShared('eventsManager');
$eventsManager->attach(
'dispatch:beforeExecuteRoute', //plug the service to this event
function (\Phalcon\Events\Event $event, $dispatcher) {
return $dispatcher->getDi()
->getShared('jwtAuth') // service declared bellow
->beforeExecuteRoute($event, $dispatcher);
}
);
$dispatcher = new \Phalcon\Mvc\Dispatcher();
$dispatcher->setEventsManager($eventsManager);
$dispatcher->setDefaultNamespace('App\Api\Controller');
return $dispatcher;
}
);
$di->setShared('jwtAuth', function () use ($di) {
return new \Dmkit\Phalcon\Auth\Middleware\JwtAuthenticator(
$di->get('request'),
$di->get('response'),
$di->get('session'),
$di->getConfig(),
'myapi-auth' //config key
);
});
public function myAction()
{
// get token from session
$tokenName = $this->config->get('myapi-auth')->get('session-token-name');
$tokenValue = $this->session->get($tokenName);
// set token and its payload in session
// array of payload data, to customize
$payload = [
'username' => $username,
'password' => $password,
'role' => 'api-user',
'iat' => time(),
];
// jwtAuth is the service name
$token = $this->jwtAuth->make($payload);
$this->session->set($tokenName, $token);
// disconnect user by unsetting the token in session
$this->session->remove($this->config->get('myapi-auth')->get('session-token-name'));
//get payload data
// in controller
$this->jwtAuth->data(); // all data array
$this->jwtAuth->data('username'); // get specific "username" data
// in another service
\Phalcon\Di::getDefault()->get('jwtAuth')->data();
}
$auth->onUnauthorized(function($auth, $request, $response, $session) {
$response->setStatusCode(401, 'Unauthorized');
$response->setContentType("application/json");
// to get the error messages
$response->setContent(json_encode([$auth->getMessages()[0] ?? '']));
// return false to stop the execution
return false;
});
$auth->onCheck(function($auth) {
// to get the payload
$data = $auth->data();
if ($data['iat'] <= strtotime('-1 day')) {
// return false to invalidate the authentication
return false;
}
});
print_r($di->get('auth')->data());
print_r($app->getDI()->get('auth')->data('email'));
// in your controller
print_r($this->auth->data());
echo $this->auth->id(); // will look for sub or id payload
echo $this->auth->data(); // return all payload
echo $this->auth->data('email');
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.