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"
}