MIF_E31230892/PERBAIKAN_LOGIN_MOBILE.md

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

3. Fungsi Reset Password

  • Ditambahkan method resetPassword() di UserController.php
  • Reset password otomatis ke NIS santri
  • Routes ditambahkan:
    • POST /admin/users/santri/{user}/reset-passwordadmin.users.santri_reset_password
    • POST /admin/users/wali/{user}/reset-passwordadmin.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

  1. Edit file test_login.php

    $username = "Ahmad Fauzi";  // Ganti dengan nama santri yang sudah punya akun wali
    $password = "2024001";      // Ganti dengan NIS santri tersebut
    
  2. Jalankan dari terminal:

    php test_login.php
    
  3. 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:

  1. Cek username di database:
    SELECT username FROM users WHERE role='wali';
    
  2. Pastikan di Flutter login menggunakan username yang PERSIS SAMA termasuk huruf besar/kecil dan spasi
  3. 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:

  1. Pastikan Laravel server running:
    cd sim-pkpps
    php artisan serve
    
  2. 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 role adalah '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:

  1. Cek file log Laravel: sim-pkpps/storage/logs/laravel.log
  2. Cek Flutter console untuk error network
  3. Pastikan username & password 100% match dengan database
  4. 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)