1. Go to this page and download the library: Download delight-im/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/ */
delight-im / auth example snippets
// $db = new \PDO('mysql:dbname=my-database;host=localhost;charset=utf8mb4', 'my-username', 'my-password');
// or
// $db = new \PDO('pgsql:dbname=my-database;host=localhost;port=5432', 'my-username', 'my-password');
// or
// $db = new \PDO('sqlite:../Databases/my-database.sqlite');
// or
// $db = \Delight\Db\PdoDatabase::fromDsn(new \Delight\Db\PdoDsn('mysql:dbname=my-database;host=localhost;charset=utf8mb4', 'my-username', 'my-password'));
// or
// $db = \Delight\Db\PdoDatabase::fromDsn(new \Delight\Db\PdoDsn('pgsql:dbname=my-database;host=localhost;port=5432', 'my-username', 'my-password'));
// or
// $db = \Delight\Db\PdoDatabase::fromDsn(new \Delight\Db\PdoDsn('sqlite:../Databases/my-database.sqlite'));
$auth = new \Delight\Auth\Auth($db);
try {
$userId = $auth->register($_POST['email'], $_POST['password'], $_POST['username'], function ($selector, $token) {
echo 'Send ' . $selector . ' and ' . $token . ' to the user (e.g. via email)';
echo ' For emails, consider using the mail(...) function, Symfony Mailer, Swiftmailer, PHPMailer, etc.';
echo ' For SMS, consider using a third-party service and a compatible SDK';
});
echo 'We have signed up a new user with the ID ' . $userId;
}
catch (\Delight\Auth\InvalidEmailException $e) {
die('Invalid email address');
}
catch (\Delight\Auth\InvalidPasswordException $e) {
die('Invalid password');
}
catch (\Delight\Auth\UserAlreadyExistsException $e) {
die('User already exists');
}
catch (\Delight\Auth\TooManyRequestsException $e) {
die('Too many requests');
}
if (\preg_match('/[\x00-\x1f\x7f\/:\\\\]/', $username) === 0) {
// ...
}
if ($_POST['remember'] == 1) {
// keep logged in for one year
$rememberDuration = (int) (60 * 60 * 24 * 365.25);
}
else {
// do not keep logged in after session ends
$rememberDuration = null;
}
// ...
$auth->login($_POST['email'], $_POST['password'], $rememberDuration);
// ...
try {
$auth->forgotPassword($_POST['email'], function ($selector, $token) {
echo 'Send ' . $selector . ' and ' . $token . ' to the user (e.g. via email)';
echo ' For emails, consider using the mail(...) function, Symfony Mailer, Swiftmailer, PHPMailer, etc.';
echo ' For SMS, consider using a third-party service and a compatible SDK';
});
echo 'Request has been generated';
}
catch (\Delight\Auth\InvalidEmailException $e) {
die('Invalid email address');
}
catch (\Delight\Auth\EmailNotVerifiedException $e) {
die('Email not verified');
}
catch (\Delight\Auth\ResetDisabledException $e) {
die('Password reset is disabled');
}
catch (\Delight\Auth\TooManyRequestsException $e) {
die('Too many requests');
}
try {
$auth->canResetPasswordOrThrow($_GET['selector'], $_GET['token']);
echo 'Put the selector into a "hidden" field (or keep it in the URL)';
echo 'Put the token into a "hidden" field (or keep it in the URL)';
echo 'Ask the user for their new password';
}
catch (\Delight\Auth\InvalidSelectorTokenPairException $e) {
die('Invalid token');
}
catch (\Delight\Auth\TokenExpiredException $e) {
die('Token expired');
}
catch (\Delight\Auth\ResetDisabledException $e) {
die('Password reset is disabled');
}
catch (\Delight\Auth\TooManyRequestsException $e) {
die('Too many requests');
}
if ($auth->canResetPassword($_GET['selector'], $_GET['token'])) {
echo 'Put the selector into a "hidden" field (or keep it in the URL)';
echo 'Put the token into a "hidden" field (or keep it in the URL)';
echo 'Ask the user for their new password';
}
try {
if ($auth->reconfirmPassword($_POST['password'])) {
$auth->changeEmail($_POST['newEmail'], function ($selector, $token) {
echo 'Send ' . $selector . ' and ' . $token . ' to the user (e.g. via email to the *new* address)';
echo ' For emails, consider using the mail(...) function, Symfony Mailer, Swiftmailer, PHPMailer, etc.';
echo ' For SMS, consider using a third-party service and a compatible SDK';
});
echo 'The change will take effect as soon as the new email address has been confirmed';
}
else {
echo 'We can\'t say if the user is who they claim to be';
}
}
catch (\Delight\Auth\InvalidEmailException $e) {
die('Invalid email address');
}
catch (\Delight\Auth\UserAlreadyExistsException $e) {
die('Email address already exists');
}
catch (\Delight\Auth\EmailNotVerifiedException $e) {
die('Account not verified');
}
catch (\Delight\Auth\NotLoggedInException $e) {
die('Not logged in');
}
catch (\Delight\Auth\TooManyRequestsException $e) {
die('Too many requests');
}
try {
$auth->resendConfirmationForEmail($_POST['email'], function ($selector, $token) {
echo 'Send ' . $selector . ' and ' . $token . ' to the user (e.g. via email)';
echo ' For emails, consider using the mail(...) function, Symfony Mailer, Swiftmailer, PHPMailer, etc.';
echo ' For SMS, consider using a third-party service and a compatible SDK';
});
echo 'The user may now respond to the confirmation request (usually by clicking a link)';
}
catch (\Delight\Auth\ConfirmationRequestNotFound $e) {
die('No earlier request found that could be re-sent');
}
catch (\Delight\Auth\TooManyRequestsException $e) {
die('There have been too many requests -- try again later');
}
try {
$auth->resendConfirmationForUserId($_POST['userId'], function ($selector, $token) {
echo 'Send ' . $selector . ' and ' . $token . ' to the user (e.g. via email)';
echo ' For emails, consider using the mail(...) function, Symfony Mailer, Swiftmailer, PHPMailer, etc.';
echo ' For SMS, consider using a third-party service and a compatible SDK';
});
echo 'The user may now respond to the confirmation request (usually by clicking a link)';
}
catch (\Delight\Auth\ConfirmationRequestNotFound $e) {
die('No earlier request found that could be re-sent');
}
catch (\Delight\Auth\TooManyRequestsException $e) {
die('There have been too many requests -- try again later');
}
if ($auth->isLoggedIn()) {
echo 'User is signed in';
}
else {
echo 'User is not signed in yet';
}
$id = $auth->getUserId();
$email = $auth->getEmail();
$username = $auth->getUsername();
if ($auth->isNormal()) {
echo 'User is in default state';
}
if ($auth->isArchived()) {
echo 'User has been archived';
}
if ($auth->isBanned()) {
echo 'User has been banned';
}
if ($auth->isLocked()) {
echo 'User has been locked';
}
if ($auth->isPendingReview()) {
echo 'User is pending review';
}
if ($auth->isSuspended()) {
echo 'User has been suspended';
}
if ($auth->isRemembered()) {
echo 'User did not sign in but was logged in through their long-lived cookie';
}
else {
echo 'User signed in manually';
}
$ip = $auth->getIpAddress();
function getUserInfo(\Delight\Auth\Auth $auth) {
if (!$auth->isLoggedIn()) {
return null;
}
if (!isset($_SESSION['_internal_user_info'])) {
// TODO: load your custom user information and assign it to the session variable below
// $_SESSION['_internal_user_info'] = ...
}
return $_SESSION['_internal_user_info'];
}
try {
if ($auth->reconfirmPassword($_POST['password'])) {
echo 'The user really seems to be who they claim to be';
}
else {
echo 'We can\'t say if the user is who they claim to be';
}
}
catch (\Delight\Auth\NotLoggedInException $e) {
die('The user is not signed in');
}
catch (\Delight\Auth\TooManyRequestsException $e) {
die('Too many requests');
}
if ($auth->hasRole(\Delight\Auth\Role::SUPER_MODERATOR)) {
echo 'The user is a super moderator';
}
// or
if ($auth->hasAnyRole(\Delight\Auth\Role::DEVELOPER, \Delight\Auth\Role::MANAGER)) {
echo 'The user is either a developer, or a manager, or both';
}
// or
if ($auth->hasAllRoles(\Delight\Auth\Role::DEVELOPER, \Delight\Auth\Role::MANAGER)) {
echo 'The user is both a developer and a manager';
}
\Delight\Auth\Role::getMap();
// or
\Delight\Auth\Role::getNames();
// or
\Delight\Auth\Role::getValues();
function canEditArticle(\Delight\Auth\Auth $auth) {
return $auth->hasAnyRole(
\Delight\Auth\Role::MODERATOR,
\Delight\Auth\Role::SUPER_MODERATOR,
\Delight\Auth\Role::ADMIN,
\Delight\Auth\Role::SUPER_ADMIN
);
}
// ...
if (canEditArticle($auth)) {
echo 'The user can edit articles here';
}
// ...
if (canEditArticle($auth)) {
echo '... and here';
}
// ...
if (canEditArticle($auth)) {
echo '... and here';
}
namespace My\Namespace;
final class MyRole {
const CUSTOMER_SERVICE_AGENT = \Delight\Auth\Role::REVIEWER;
const FINANCIAL_DIRECTOR = \Delight\Auth\Role::COORDINATOR;
private function __construct() {}
}
\My\Namespace\MyRole::CUSTOMER_SERVICE_AGENT;
// and
\My\Namespace\MyRole::FINANCIAL_DIRECTOR;
\Delight\Auth\Role::REVIEWER;
// and
\Delight\Auth\Role::COORDINATOR;
try {
if ($auth->reconfirmPassword($_POST['password'])) {
$auth->setPasswordResetEnabled($_POST['enabled'] == 1);
echo 'The setting has been changed';
}
else {
echo 'We can\'t say if the user is who they claim to be';
}
}
catch (\Delight\Auth\NotLoggedInException $e) {
die('The user is not signed in');
}
catch (\Delight\Auth\TooManyRequestsException $e) {
die('Too many requests');
}
$auth->isPasswordResetEnabled();
try {
// throttle the specified resource or feature to *3* requests per *60* seconds
$auth->throttle([ 'my-resource-name' ], 3, 60);
echo 'Do something with the resource or feature';
}
catch (\Delight\Auth\TooManyRequestsException $e) {
// operation cancelled
\http_response_code(429);
exit;
}
try {
$userId = $auth->admin()->createUser($_POST['email'], $_POST['password'], $_POST['username']);
echo 'We have signed up a new user with the ID ' . $userId;
}
catch (\Delight\Auth\InvalidEmailException $e) {
die('Invalid email address');
}
catch (\Delight\Auth\InvalidPasswordException $e) {
die('Invalid password');
}
catch (\Delight\Auth\UserAlreadyExistsException $e) {
die('User already exists');
}
try {
if ($auth->admin()->doesUserHaveRole($userId, \Delight\Auth\Role::ADMIN)) {
echo 'The specified user is an administrator';
}
else {
echo 'The specified user is not an administrator';
}
}
catch (\Delight\Auth\UnknownIdException $e) {
die('Unknown user ID');
}