rulli / laravel-onedrive
Laravel package untuk OneDrive Personal (Microsoft account) dengan login permanen via auto-refresh token.
Requires
- php: ^8.1
- illuminate/cache: ^9.0|^10.0|^11.0|^12.0|^13.0
- illuminate/console: ^9.0|^10.0|^11.0|^12.0|^13.0
- illuminate/contracts: ^9.0|^10.0|^11.0|^12.0|^13.0
- illuminate/database: ^9.0|^10.0|^11.0|^12.0|^13.0
- illuminate/encryption: ^9.0|^10.0|^11.0|^12.0|^13.0
- illuminate/http: ^9.0|^10.0|^11.0|^12.0|^13.0
- illuminate/routing: ^9.0|^10.0|^11.0|^12.0|^13.0
- illuminate/support: ^9.0|^10.0|^11.0|^12.0|^13.0
Requires (Dev)
- phpunit/phpunit: ^10.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
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.