1. Go to this page and download the library: Download jardissupport/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/ */
jardissupport / auth example snippets
use JardisSupport\Auth\SessionManager;
use JardisSupport\Auth\Data\Subject;
$sessionManager = new SessionManager($tokenStore);
$subject = Subject::from('user-42', 'user');
$result = $sessionManager->create($subject, ['role' => 'editor']);
$accessToken = $result->accessToken; // send to client
$refreshToken = $result->refreshToken; // store securely on client
$session = $result->session; // use server-side
// Dispatch events (optional — use your EventDispatcher)
foreach ($result->events as $event) {
$dispatcher->dispatch($event);
}
use JardisSupport\Auth\Handler\Token\VerifyToken;
use JardisSupport\Auth\Data\TokenType;
// Verify an access token
$verifier = new VerifyToken();
$hash = hash('sha256', $accessToken);
$stored = $tokenStore->find($hash);
$verifier($accessToken, $stored, TokenType::Access);
// throws TokenExpiredException or TokenRevokedException
// Refresh — rotates tokens, revokes the old refresh token
$newResult = $sessionManager->refresh($refreshToken);
// $newResult->events contains SessionCreated + SessionRefreshed
use JardisSupport\Auth\PasswordHasher;
$hasher = PasswordHasher::argon2id();
// Registration
$hash = $hasher->hash('secret-password');
// Login
$hasher->verify('secret-password', $hash); // true
// Rehash check on every login
if ($hasher->needsRehash($hash)) {
$newHash = $hasher->hash('secret-password');
// update stored hash
}
use JardisSupport\Auth\Guard;
use JardisSupport\Auth\Data\Policy;
$policy = Policy::create()
->role('admin')->allow('*')
->role('editor')
->allow('article:read', 'article:write', 'article:publish')
->deny('article:delete')
->role('viewer')->allow('article:read')
->role('moderator')->reatedAt: new DateTimeImmutable(),
expiresAt: null,
metadata: ['role' => ['editor', 'moderator']],
);
$guard->check($session, 'comment:delete'); // true (moderator has permission)
use JardisSupport\Auth\PasswordAuthenticator;
use JardisSupport\Auth\Data\Credential;
$authenticator = new PasswordAuthenticator(
$passwordHasher,
$sessionManager,
function (string $identifier): ?array {
$user = $userRepository->findByEmail($identifier);
if ($user === null) {
return null;
}
return [
'hash' => $user->passwordHash,
'subject' => Subject::from($user->id, 'user'),
'claims' => ['role' => $user->role],
];
},
);
$credential = Credential::password('[email protected]', 'secret123');
$result = $authenticator->authenticate($credential);
if ($result->isSuccess()) {
$session = $result->session;
$accessToken = $result->accessToken;
}
// All events in one place: SessionCreated + AuthenticationSucceeded (or AuthenticationFailed)
foreach ($result->events as $event) {
$dispatcher->dispatch($event);
}
// Single session (logout) — returns SessionInvalidated event
$event = $sessionManager->invalidate($session);
// All sessions for a subject (logout everywhere) — returns AllSessionsInvalidated event
$event = $sessionManager->invalidateAll('user:user-42');
use JardisSupport\Contract\Auth\TokenStoreInterface;
use JardisSupport\Auth\Data\HashedToken;
class DatabaseTokenStore implements TokenStoreInterface
{
public function __construct(private PDO $pdo) {}
public function store(HashedToken $token): void { /* INSERT */ }
public function find(string $hash): ?HashedToken { /* SELECT */ }
public function revoke(string $hash): void { /* UPDATE revoked = true */ }
public function revokeAllForSubject(string $subject): void { /* UPDATE WHERE subject = ? */ }
public function deleteExpired(): int { /* DELETE WHERE expires_at < NOW() */ }
}