laravel-onedrive maintained by rulli
rulli/laravel-onedrive
Package Laravel untuk OneDrive Personal (akun Microsoft pribadi, bukan Outlook/Kantor) via Microsoft Graph API, dengan login permanen — token di-refresh otomatis di belakang layar, Anda hanya perlu konsep login lewat browser satu kali.
Cara "login permanen" bekerja
- Saat login pertama, package meminta scope
offline_access→ Anda mendapatrefresh_token. - Access token Microsoft hanya berlaku ±1 jam. Setiap access token kedaluwarsa, package otomatis menukarnya dengan
refresh_token— dan Microsoft memberikanrefresh_tokenbaru (di-rotate). - Selama aplikasi memanggil OneDrive minimal 1× dalam 90 hari, refresh token terus berputar dan tidak pernah kedaluwarsa = login permanen.
- Token disimpan terenkripsi (Laravel
Crypt, memakaiAPP_KEY) di tabel database.
Jika >90 hari tidak dipakai, cukup buka kembali /onedrive/login untuk memasangkan ulang.
Kebutuhan
- PHP 8.1+
- Laravel 9, 10, 11, 12, atau 13
Instalasi
# di project Laravel Anda
composer require rulli/laravel-onedrive
php artisan vendor:publish --tag=onedrive-config
php artisan vendor:publish --tag=onedrive-migrations
php artisan migrate
Alternatif: install dari source lokal (sebelum rilis di Packagist)
composer config repositories.rulli-onedrive '{"type":"path","url":"E:/www/laravel-onedrive"}'
composer require rulli/laravel-onedrive:@dev
Daftarkan App di Azure (untuk OneDrive Personal) — SEKALI
- Buka https://portal.azure.com → cari App registrations → New registration
- Isi nama, mis.
Laravel OneDrive - Supported account: pilih "Personal Microsoft accounts only" ← ini kunci OneDrive personal
- Redirect URI (tipe Web):
http://localhost:8000/onedrive/callback→ Register - Buka app → Certificates & secrets → New client secret → simpan nilainya
- API permissions (Personal Microsoft permissions): sudah default
User.Read— cukup, scope lain diminta waktu login.
Konfigurasi .env project Laravel
ONEDRIVE_CLIENT_ID=xxxx-xxxx-xxxx
ONEDRIVE_CLIENT_SECRET=xxxxx~xxxxxx
ONEDRIVE_REDIRECT_URI=http://localhost:8000/onedrive/callback
Login (cukup 1× via browser)
http://localhost:8000/onedrive/login
Muncul halaman login Microsoft → masukkan akun personal (outlook.com / hotmail.com) → klik "Izinkan" → selesai. Token tersimpan permanen di database.
URL tersedia:
| URL | Fungsi |
|---|---|
/onedrive/login |
mulai login |
/onedrive/callback |
dipanggil Microsoft (otomatis) |
/onedrive/status |
cek koneksi (JSON) |
/onedrive/logout |
hapus token (login ulang kapan saja) |
Pemakaian
use Rulli\OneDrive\Facades\OneDrive;
// Informasi akun
OneDrive::me(); // nama, email utama
OneDrive::drive(); // info drive
// Daftar isi
OneDrive::list('/'); // root
OneDrive::list('/Documents');
OneDrive::meta('/Documents/laporan.pdf');
OneDrive::exists('/Documents/laporan.pdf');
// Download
$isi = OneDrive::download('/Documents/laporan.pdf'); // string
OneDrive::downloadTo('/Documents/besar.zip', storage_path('app/besar.zip')); // streaming file besar
$url = OneDrive::downloadUrl('/Documents/laporan.pdf'); // tautan unduh sementara
// Upload
OneDrive::upload('/Documents/laporan.pdf', file_get_contents('laporan.pdf')); // kecil & besar otomatis
OneDrive::uploadFrom(storage_path('app/backup.zip'), '/Backup/backup.zip');
// Folder
OneDrive::mkdir('/Backup/2026/Oktober');
OneDrive::move('/Documents/lama.pdf', '/Backup/lama.pdf', 'baru.pdf'); // pindah + rename
OneDrive::delete('/Backup/lama.pdf');
// Berbagi & cari
$link = OneDrive::shareLink('/Documents/laporan.pdf'); // link publik view
OneDrive::search('laporan');
OneDrive::recent();
Contoh di Laravel route/controller
Route::get('/backup', function () {
\Rulli\OneDrive\Facades\OneDrive::uploadFrom(
storage_path('app/db.sql'),
'/Backup/db-' . date('Y-m-d') . '.sql'
);
return 'berhasil diupload!';
});
Perintah artisan
php artisan onedrive:status
Handling error (token habis >90 hari, password diganti/dicabut)
try {
OneDrive::list('/');
} catch (\Rulli\OneDrive\OneDriveAuthRequiredException $e) {
// Kondisi ini jarang: refresh token praktis permanen di rotasi otomatis.
// Redirect user ke /onedrive/login —
return redirect('/onedrive/login');
}
Anda juga dapat memanggil OneDrive::needsRelogin() false secara manual sebelum proses berjalan.
Keamanan
- Token (
access_token,refresh_token) disimpan terenkripsi di database memakaiAPP_KEY. - Pastikan
.envtidak ikut ke git, danAPP_KEYdisimpan aman. - Untuk produksi, ganti
ONEDRIVE_REDIRECT_URIke domain HTTPS Anda.
Catatan
- Package ini spesifik akun personal (
login.microsoftonline.com/consumers). Untuk OneDrive bisnis (Microsoft 365/kantor), tenant →commonatauorganizations. - File > 4 MB menggunakan upload session (chunk 5 MB) — aman untuk file multi-GB.