7.0 KiB
7.0 KiB
Panduan Perbaikan Sistem Login Mobile SIM-PKPPS
✅ Perbaikan yang Sudah Dilakukan
1. Auto-Fill Username & Password ✅
- JavaScript diperbaiki dari
@push('scripts')menjadi inline<script>di create_account.blade.php - Saat memilih santri di dropdown, otomatis mengisi:
- Username: Nama Santri
- Password: NIS Santri
- Field menjadi readonly saat sudah terisi otomatis
- Jika santri belum punya NIS, akan muncul alert dan field bisa diisi manual
2. Fungsi Delete Akun ✅
- Ditambahkan method
destroyAccount()di UserController.php - Routes ditambahkan:
DELETE /admin/users/santri/{user}→admin.users.santri_destroyDELETE /admin/users/wali/{user}→admin.users.wali_destroy
- Tombol delete dengan konfirmasi di:
3. Fungsi Reset Password ✅
- Ditambahkan method
resetPassword()di UserController.php - Reset password otomatis ke NIS santri
- Routes ditambahkan:
POST /admin/users/santri/{user}/reset-password→admin.users.santri_reset_passwordPOST /admin/users/wali/{user}/reset-password→admin.users.wali_reset_password
- Tombol reset dengan konfirmasi di view akun santri/wali
🔧 Cara Testing Login Mobile
A. Test API Login Menggunakan File PHP Test
-
Edit file test_login.php
$username = "Ahmad Fauzi"; // Ganti dengan nama santri yang sudah punya akun wali $password = "2024001"; // Ganti dengan NIS santri tersebut -
Jalankan dari terminal:
php test_login.php -
Hasil yang diharapkan:
✅ LOGIN BERHASIL! Token: 1|xxxxxxxxxxxxx User: Ahmad Fauzi Role: wali
B. Cek Database Untuk Memastikan Akun Ada
-- Cek akun wali yang sudah dibuat
SELECT
u.id,
u.username,
u.role,
s.nama_lengkap,
s.nis
FROM users u
JOIN santris s ON u.role_id = s.id_santri
WHERE u.role = 'wali';
C. Troubleshooting Login Mobile Gagal
❌ Error: "Username atau password salah"
Penyebab:
- Username tidak match persis dengan database (case-sensitive, spasi, typo)
- Password salah (pastikan menggunakan NIS yang benar)
Solusi:
- Cek username di database:
SELECT username FROM users WHERE role='wali'; - Pastikan di Flutter login menggunakan username yang PERSIS SAMA termasuk huruf besar/kecil dan spasi
- Password harus NIS santri (bisa dicek di tabel santris)
❌ Error: "Connection refused" / "Network error"
Penyebab:
- Laravel server tidak jalan
- Base URL salah di Flutter
Solusi:
- Pastikan Laravel server running:
cd sim-pkpps php artisan serve - Cek app_config.dart:
static const String baseUrl = 'http://10.0.2.2:8000/api/v1'; // Emulator // atau static const String baseUrl = 'http://192.168.x.x:8000/api/v1'; // Real device
❌ Error: "Akun tidak memiliki akses mobile"
Penyebab:
- User role bukan 'santri' atau 'wali'
Solusi:
- Pastikan di database field
roleadalah 'wali', bukan 'admin' atau lainnya
📋 Checklist Testing Lengkap
1. Testing Web Admin (Buat Akun Wali)
- Buka halaman Manajemen Akun Wali (
/admin/users/wali) - Klik "Buat Akun Wali"
- Pilih santri dari dropdown
- Cek: Username otomatis terisi dengan nama santri ✅
- Cek: Password otomatis terisi dengan NIS ✅
- Klik "Simpan"
- Cek: Akun muncul di daftar dengan info login ✅
2. Testing Fungsi Delete
- Di halaman Manajemen Akun Wali
- Klik tombol "Hapus" pada salah satu akun
- Cek: Muncul konfirmasi dialog ✅
- Klik OK
- Cek: Akun terhapus dari daftar ✅
3. Testing Fungsi Reset Password
- Di halaman Manajemen Akun Wali
- Klik tombol "Reset" pada salah satu akun
- Cek: Muncul konfirmasi dialog ✅
- Klik OK
- Cek: Muncul pesan sukses dengan info password baru (NIS) ✅
4. Testing Login Mobile
- Jalankan Flutter app (emulator/real device)
- Pastikan Laravel server running (
php artisan serve) - Di login page, masukkan:
- Username: Nama santri (persis seperti di database)
- Password: NIS santri
- Klik Login
- Cek: Berhasil masuk ke dashboard ✅
- Cek: Menu Profil menampilkan data santri ✅
🐛 Debug Mode - Jika Masih Gagal
1. Tambahkan Log di ApiAuthController
Edit ApiAuthController.php:
public function login(Request $request)
{
// Log untuk debug
\Log::info('Login attempt', [
'username' => $request->id_santri,
'password_length' => strlen($request->password)
]);
$user = User::where('username', $request->id_santri)->first();
if (!$user) {
\Log::warning('User not found', ['username' => $request->id_santri]);
}
// ... kode lainnya
}
Cek log di storage/logs/laravel.log
2. Test Manual Dengan Postman/cURL
curl -X POST http://localhost:8000/api/v1/login \
-H "Content-Type: application/json" \
-d '{
"id_santri": "Ahmad Fauzi",
"password": "2024001"
}'
3. Validasi Data di Database
-- Cek akun wali yang baru dibuat
SELECT
u.id,
u.username,
u.role,
u.role_id,
s.nama_lengkap,
s.nis,
LENGTH(u.password) as password_hash_length
FROM users u
JOIN santris s ON u.role_id = s.id_santri
WHERE u.role = 'wali'
ORDER BY u.id DESC
LIMIT 5;
Password hash length seharusnya 60 karakter (bcrypt)
📱 Format Login yang Benar
| Field | Value | Contoh |
|---|---|---|
| Username | Nama Santri (PERSIS seperti di database) | Ahmad Fauzi |
| Password | NIS Santri | 2024001 |
| Role | Otomatis terdeteksi dari database | wali |
⚠️ PENTING:
- Username case-sensitive: "Ahmad Fauzi" ≠ "ahmad fauzi"
- Spasi dihitung: "Ahmad Fauzi" ≠ "AhmadFauzi"
- Password adalah NIS plain text (tidak di-hash saat input), Laravel akan auto-verify hash
🔒 Keamanan
- Password di database di-hash dengan bcrypt (60 karakter)
- Token menggunakan Laravel Sanctum
- Setiap login, token lama dihapus (single device per account)
- API hanya bisa diakses oleh role 'santri' dan 'wali'
📞 Troubleshooting Contact
Jika masih ada masalah:
- Cek file log Laravel:
sim-pkpps/storage/logs/laravel.log - Cek Flutter console untuk error network
- Pastikan username & password 100% match dengan database
- Test dengan file test_login.php terlebih dahulu sebelum test di mobile
Semua fungsi sudah diimplementasikan:
- ✅ Auto-fill username & password
- ✅ Delete akun
- ✅ Reset password
- ✅ Login mobile ready (tinggal test dengan data yang benar)