1. Go to this page and download the library: Download aura/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/ */
aura / auth example snippets
$auth_factory = new \Aura\Auth\AuthFactory($_COOKIE);
$auth = $auth_factory->newInstance();
// the authentication status is currently anonymous
echo $auth->getStatus(); // ANON
// create the login service
$login_service = $auth_factory->newLoginService();
// use the service to force $auth to a logged-in state
$username = 'boshag';
$userdata = array(
'first_name' => 'Bolivar',
'last_name' => 'Shagnasty',
'email' => '[email protected]',
);
$login_service->forceLogin($auth, $username, $userdata);
// now the authentication status is valid
echo $auth->getStatus(); // VALID
// the authentication status is currently valid
echo $auth->getStatus(); // VALID
// create the logout service
$logout_service = $auth_factory->newLogoutService();
// use the service to force $auth to a logged-out state
$logout_service->forceLogout($auth);
// now the authentication status is anonymous/invalid
echo $auth->getStatus(); // ANON
// create the resume service
$resume_service = $auth_factory->newResumeService();
// use the service to resume any previously-existing session
$resume_service->resume($auth);
// $_SESSION has now been repopulated, if a session was started previously,
// meaning the $auth object is now populated with its previous values, if any
$pdo = new \PDO(...);
$hash = new PasswordVerifier(PASSWORD_BCRYPT);
$cols = array(
'accounts.username', // "AS username" is added by the adapter
'accounts.bcryptpass', // "AS password" is added by the adapter
'accounts.uid AS uid',
'userinfo.email AS email',
'userinfo.uri AS website',
'userinfo.fullname AS display_name',
);
$from = 'accounts JOIN profiles ON accounts.uid = profiles.uid';
$where = 'accounts.active = 1';
$pdo_adapter = $auth_factory->newPdoAdapter($pdo, $hash, $cols, $from, $where);
use Aura\Auth\Adapter\AdapterInterface;
use Aura\Auth\Auth;
use Aura\Auth\Status;
class CustomAdapter implements AdapterInterface
{
// AdapterInterface::login()
public function login(array $input)
{
if ($this->isLegit($input)) {
$username = ...;
$userdata = array(...);
$this->updateLoginTime(time());
return array($username, $userdata);
} else {
throw CustomException('Something went wrong.');
}
}
// AdapterInterface::logout()
public function logout(Auth $auth, $status = Status::ANON)
{
$this->updateLogoutTime($auth->getUsername(), time());
}
// AdapterInterface::resume()
public function resume(Auth $auth)
{
$this->updateActiveTime($auth->getUsername(), time());
}
// custom support methods not in the interface
protected function isLegit($input) { ... }
protected function updateLoginTime($time) { ... }
protected function updateActiveTime($time) { ... }
protected function updateLogoutTime($time) { ... }
}
namespace OAuth2\Adapter;
use Aura\Auth\Adapter\AdapterInterface;
use Aura\Auth\Exception;
use Aura\Auth\Auth;
use Aura\Auth\Status;
use League\OAuth2\Client\Provider\AbstractProvider;
class LeagueOAuth2Adapter implements AdapterInterface
{
/**
* @var \League\OAuth2\Client\Provider\IdentityProvider
* The identity provider that the adapter will use
*/
protected $provider;
public function __construct(AbstractProvider $provider)
{
$this->provider = $provider;
}
/**
* @param $input an input containing the OAuth 2 code
* @return array the username and details for the user
* @throws \Aura\Auth\Exception
* This method must be implemented to fulfill the contract
* with AdapterInterface
*/
public function login(array $input)
{
if (!isset($input['code'])) {
throw new Exception('Authorization code missing.');
}
$token = $this->provider->getAccessToken(
'authorization_code',
array('code' => $input['code'])
);
$details = $this->provider->getResourceOwner($token);
$data = [
'name' => $details->getName(),
'email' => $details->getEmail(),
];
$data['token'] = $token;
$username = $data['email'];
return [$username, $data];
}
/**
* @param Auth $auth
* Logout method is
namespace OAuth2;
use Aura\Auth\AuthFactory;
use League\OAuth2\Client\Provider\Github;
use OAuth2\Adapter\LeagueOAuth2Adapter;
use Aura\Auth\Exception;
'clientSecret' => 'xxxxxxxxxxxxxxxxxxxx',
'redirectUri' => 'http://aura.auth.dev/'
));
if (!isset($_GET['code'])) {
header('Location: ' . $github_provider->getAuthorizationUrl());
exit;
} else {
$oauth_adapter = new LeagueOAuth2Adapter($github_provider);
$login_service = $auth_factory->newLoginService($oauth_adapter);
try {
// array is the username and an array of info and indicates successful
// login
$data = $login_service->login($auth, $_GET);
} catch (Exception $e) {
// handle the exception
}
}
$auth = $auth_factory->newInstance();
$resume_service = $auth_factory->newResumeService(...);
$resume_service->resume($auth);
switch (true) {
case $auth->isAnon():
echo "You are not logged in.";
break;
case $auth->isIdle():
echo "Your session was idle for too long. Please log in again.";
break;
case $auth->isExpired():
echo "Your session has expired. Please log in again.";
break;
case $auth->isValid():
echo "You are still logged in.";
break;
default:
echo "You have an unknown status.";
break;
}
class InvalidLoginException extends Exception {}
$auth = $auth_factory->newInstance();
$login_service = $auth_factory->newLoginService(...);
try {
$login_service->login($auth, array(
'username' => $_POST['username'],
'password' => $_POST['password'],
);
echo "You are now logged into a new session.";
} catch (\Aura\Auth\Exception\UsernameMissing $e) {
$log->notice("The 'username' field is missing or empty.");
throw new InvalidLoginException();
} catch (\Aura\Auth\Exception\PasswordMissing $e) {
$log->notice("The 'password' field is missing or empty.");
throw new InvalidLoginException();
} catch (\Aura\Auth\Exception\UsernameNotFound $e) {
$log->warning("The username you entered was not found.");
throw new InvalidLoginException();
} catch (\Aura\Auth\Exception\MultipleMatches $e) {
$log->warning("There is more than one account with that username.");
throw new InvalidLoginException();
} catch (\Aura\Auth\Exception\PasswordIncorrect $e) {
$log->notice("The password you entered was incorrect.");
throw new InvalidLoginException();
} catch (\Aura\Auth\Exception\ConnectionFailed $e) {
$log->notice("Cound not connect to IMAP or LDAP server.");
$log->info("This could be because the username or password was wrong,");
$log->info("or because the the connect operation itself failed in some way. ");
$log->info($e->getMessage());
throw new InvalidLoginException();
} catch (\Aura\Auth\Exception\BindFailed $e) {
$log->notice("Cound not bind to LDAP server.");
$log->info("This could be because the username or password was wrong,");
$log->info("or because the the bind operation itself failed in some way. ");
$log->info($e->getMessage());
throw new InvalidLoginException();
} catch (InvalidLoginException $e) {
echo "Invalid login details. Please try again.";
}
$auth = $auth_factory->newInstance();
$logout_service = $auth_factory->newLogoutService(...);
$logout_service->logout($auth);
if ($auth->isAnon()) {
echo "You are now logged out.";
} else {
echo "Something went wrong; you are still logged in.";
}
use Aura\Auth\Session\SessionInterface;
class CustomSession implements SessionInterface
{
protected $fwsession;
public function __construct(FrameworkSession $fwsession)
{
$this->fwsession = $fwsession;
}
public function start()
{
return $this->fwsession->startSession();
}
public function resume()
{
if ($this->fwsession->isAlreadyStarted()) {
return true;
}
if ($this->fwsession->canBeRestarted()) {
return $this->fwsession->restartSession();
}
return false;
}
public function regenerateId()
{
return $this->fwsession->regenerateSessionId();
}
}
use Aura\Auth\AuthFactory;
$custom_session = new CustomSession(new FrameworkSession);
$auth_factory = new AuthFactory($_COOKIE, $custom_session);
use Aura\Auth\AuthFactory;
use Aura\Auth\Session\NullSession;
use Aura\Auth\Session\NullSegment;
$null_session = new NullSession;
$null_segment = new NullSegment;
$auth_factory = new AuthFactory($_COOKIE, $null_session, $null_segment);