1. Go to this page and download the library: Download rudra/oauth-client 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/ */
rudra / oauth-client example snippets
namespace App\Containers\Auth\Task;
use Rudra\Auth\AuthFacade as Auth;
use Rudra\Container\Facades\Rudra;
use Rudra\Container\Facades\Session;
use Rudra\Redirect\RedirectFacade as Redirect;
use App\Containers\DB\Entity\Users;
class OAuth
{
/**
* Authorizes and, if necessary, registers a user
*/
public static function run(array $inputData): void
{
if (!isset($inputData['code'], $inputData['provider'])) {
return;
}
$oauthConfig = Rudra::config()->get('oauth');
$providerKey = $inputData['provider'];
if (!isset($oauthConfig[$providerKey])) {
return; // Unknown provider
}
$providerConfig = $oauthConfig[$providerKey];
$providerClass = $providerConfig['class'];
$provider = new $providerClass($providerConfig);
$provider->authenticate($inputData['code']);
$oauthUser = (object) $provider->user();
$email = $oauthUser->default_email ?? $oauthUser->email ?? ($oauthUser->login . '@' . $provider->getName());
$login = $oauthUser->login ?? $oauthUser->name;
$user = Users::getUser($email);
if (empty($user)) {
Users::create([
'name' => $login,
'email' => strtolower($email),
'password' => $providerKey,
]);
$user = Users::getUser($email);
}
$user = $user[0];
session_regenerate_id(true);
Session::set(["token", md5($user['password'] . $user['email'] . Auth::getSessionHash())]);
Session::set(["user", $user]);
Redirect::run("admin/item");
}
}
namespace Rudra\OAuthClient\Provider;
class CustomProvider extends AbstractProvider
{
public function __construct(array $config)
{
parent::__construct($config);
$this->name = 'custom';
$this->urls = [
'auth' => 'https://provider.com/oauth/authorize',
'access_token' => 'https://provider.com/oauth/token',
'remote_api' => 'https://provider.com/api/userinfo',
];
}
#[\Override]
public function authenticate(?string $code = null): void
{
if (!$code) {
return;
}
// 1. Exchange code for token (POST)
$token = $this->request([
'grant_type' => 'authorization_code',
'code' => $code,
]);
if (!isset($token['access_token'])) {
return;
}
// 2. Fetch user data (GET)
$this->urls['remote_api'] .= '?access_token=' . $token['access_token'];
$this->user = $this->request();
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.