PHP code example of bpjs / auth-client
1. Go to this page and download the library: Download bpjs/auth-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/ */
bpjs / auth-client example snippets
// routes/api.php
use Bpjs\AuthServiceClient\Middleware\AuthMiddlewareClient;
// HANYA 3 BARIS!
Api::group([AuthMiddlewareClient::class], function() {
Api::get('/payroll', [PayrollController::class, 'index']);
Api::post('/transaction', [TransactionController::class, 'store']);
});
class PayrollController
{
public function index()
{
// ✅ User sudah ada di session
$user = $_SESSION['user'];
echo "Welcome, " . $user['username'];
// Output: Welcome, admin
}
}
$middleware = new AuthMiddlewareClient([
'redirect_url' => 'http://user-service/login',
'exclude_routes' => [
'/login',
'/register',
'/api/public/*',
'/health',
],
'token_source' => 'bearer', // bearer | cookie | header | query
'cookie_name' => 'auth_token',
'header_name' => 'X-Auth-Token',
'auto_refresh' => true, // Auto refresh token expired
]);
// routes/api.php
use Bpjs\AuthServiceClient\Middleware\AuthMiddlewareClient;
// Route public (tanpa middleware)
Api::post('/auth/login', [AuthController::class, 'login']);
// Route protected (dengan middleware)
Api::group([AuthMiddlewareClient::class], function() {
Api::get('/dashboard', [DashboardController::class, 'index']);
Api::get('/payroll', [PayrollController::class, 'index']);
Api::post('/transaction', [TransactionController::class, 'store']);
// Nested group dengan permission spesifik
Api::group([AuthMiddlewareClient::class, AdminMiddleware::class], function() {
Api::get('/admin/users', [AdminController::class, 'users']);
});
});
class PayrollController
{
public function index()
{
// Cara 1: Via $_SESSION
$user = $_SESSION['user'];
$userId = $_SESSION['user_id'];
$username = $_SESSION['username'];
$roles = $_SESSION['roles'];
$permissions = $_SESSION['permissions'];
// Cara 2: Via $GLOBALS
$user = $GLOBALS['auth_user'];
// Cara 3: Via helper (kalau dibuat)
$user = auth_user();
// Cek permission
if (!in_array('payroll_view', $permissions)) {
return Response::json(['error' => 'Forbidden'], 403);
}
// Bisnis logic
$data = Payroll::where('user_id', $userId)->get();
return Response::json([
'status' => 200,
'data' => $data,
'user' => [
'id' => $userId,
'username' => $username,
]
]);
}
}
use Bpjs\AuthServiceClient\AuthServiceClient;
// Inisialisasi
$auth = new AuthServiceClient([
'base_url' => 'http://192.168.1.10:8000',
'app_key' => 'hrm_app_key_123',
'app_secret' => 'hrm_secret_abc',
]);
// Verifikasi token manual
$token = $_SERVER['HTTP_AUTHORIZATION'] ?? '';
$token = str_replace('Bearer ', '', $token);
try {
$userData = $auth->verifyToken($token);
if ($userData) {
// Token valid
$_SESSION['user'] = $userData;
echo "Welcome, " . $userData['username'];
} else {
// Token invalid
http_response_code(401);
echo json_encode(['error' => 'Invalid token']);
}
} catch (TokenExpiredException $e) {
http_response_code(401);
echo json_encode(['error' => 'Token expired']);
}
use Bpjs\AuthServiceClient\AuthServiceClient;
$auth = new AuthServiceClient([
'base_url' => 'http://192.168.1.10:8000',
]);
// LOGIN
try {
$result = $auth->login('admin', 'password123');
// Set token ke cookie
setcookie('token', $result['token'], time() + 86400, '/');
setcookie('refresh_token', $result['refresh_token'], time() + 604800, '/');
// Simpan user
$_SESSION['user'] = $result['user'];
echo "Login berhasil!";
} catch (AuthenticationException $e) {
echo "Login gagal: " . $e->getMessage();
}
// LOGOUT
$token = $_COOKIE['token'];
$auth->logout($token);
// Clear session & cookie
session_destroy();
setcookie('token', '', time() - 3600, '/');
$auth = new AuthServiceClient([...]);
// Cek menu akses
$hasAccess = $auth->checkMenuAccess($userId, 'payroll');
if ($hasAccess) {
// Tampilkan menu payroll
}
// Cek permission
$canEdit = $auth->hasPermission($userId, 'employee_edit');
if ($canEdit) {
// Tampilkan tombol edit
}
// Ambil semua menu user
$menus = $auth->getUserMenus($userId, 'hrm');
foreach ($menus as $menu) {
echo "<a href='{$menu['url']}'>{$menu['name']}</a>";
}
new AuthServiceClient(array $config = [], ?CacheManager $cache = null)
$user = $auth->verifyToken('eyJhbGciOiJIUzI1NiIs...');
// Returns: ['id' => 1, 'username' => 'admin', ...] atau null
$result = $auth->login('admin', 'password123', [
'remember_me' => true
]);
// Returns: ['token' => '...', 'refresh_token' => '...', 'user' => [...]]
$success = $auth->logout('eyJhbGciOiJIUzI1NiIs...');
// Returns: true/false
$newTokens = $auth->refreshToken('refresh_token_xxx');
// Returns: ['token' => '...', 'refresh_token' => '...']
$menus = $auth->getUserMenus(1, 'hrm');
// Returns: [['name' => 'Payroll', 'url' => '/payroll', ...], ...]
$canAccess = $auth->checkMenuAccess(1, 'payroll');
// Returns: true/false
$canEdit = $auth->hasPermission(1, 'employee_edit');
// Returns: true/false
Api::group([AuthMiddlewareClient::class], function() {
// Protected routes
});
use Bpjs\AuthServiceClient\AuthServiceClient;
use Bpjs\AuthServiceClient\Exceptions\{
AuthenticationException,
TokenExpiredException,
NetworkException
};
try {
$user = $auth->verifyToken($token);
if (!$user) {
// Token tidak valid
return response()->json(['error' => 'Unauthorized'], 401);
}
// Sukses
return response()->json(['data' => $user]);
} catch (TokenExpiredException $e) {
// Token expired - minta user login ulang
return response()->json([
'error' => 'Token expired',
'code' => 'token_expired',
'message' => 'Silakan login kembali'
], 401);
} catch (AuthenticationException $e) {
// Auth error - credentials salah
return response()->json([
'error' => 'Authentication failed',
'message' => $e->getMessage()
], 401);
} catch (NetworkException $e) {
// User Service down
return response()->json([
'error' => 'Service unavailable',
'message' => 'Layanan autentikasi sedang tidak tersedia'
], 503);
} catch (\Throwable $e) {
// Unknown error
return response()->json([
'error' => 'Internal server error'
], 500);
}
{
"status": "success",
"data": {
"id": 1,
"username": "admin",
"roles": ["admin"],
"permissions": ["payroll_view", "employee_edit"]
}
}
{
"status": 401,
"message": "Token tidak ditemukan",
"error": "unauthorized"
}
{
"status": 401,
"message": "Token expired",
"error": "token_expired",
"code": "token_expired"
}
{
"status": 403,
"message": "Anda tidak memiliki akses ke resource ini",
"error": "forbidden"
}