MIF_E31231714/LOGIN_SYSTEM_DOCUMENTATION.md

6.8 KiB

📋 Login System - JTI Management Portal

Status: BERHASIL DIIMPLEMENTASIKAN

Fitur Utama yang Telah Dibuat:

1. Login Form (resources/views/auth/login.blade.php)

  • Modern design dengan gradient background
  • 🎨 Responsive layout (mobile-friendly)
  • 🔐 Password visibility toggle
  • Form validation dengan error messages
  • 📱 Smooth animations
  • 💾 Remember me functionality

2. Authentication Controller (app/Http/Controllers/AuthController.php)

  • Login logic untuk UserDosen dan UserStaff
  • Password hashing dengan Bcrypt (Hash::check)
  • Session management
  • Logout functionality
  • Auto-redirect untuk authenticated users

3. Models Support

  • UserDosen: Implements Authenticatable interface
  • UserStaff: Implements Authenticatable interface
  • Password field ter-hash dengan Bcrypt

4. Routes Configuration (routes/web.php)

GET  /login              → Show login form
POST /login              → Process login
POST /logout             → Logout user
GET  /welcome            → Protected welcome page (requires auth)

5. Database Migrations

  • 2026_04_14_000002_create_users_dosen_table.php
  • 2026_04_14_000001_create_users_staff_table.php
  • 2026_05_19_000000_add_remember_token_to_users.php (New)
  • 2026_04_15_000001_create_attendances_table.php

6. Helper Commands

  • php artisan app:hash-passwords - Hash all existing plain text passwords
  • php artisan app:reset-password {nip} {password} {--type=dosen} - Reset user password

🚀 Cara Menggunakan

Akses Login

URL: http://127.0.0.1:8000/login

Demo Credentials

NIP: 19801212 200501 1 001
Password: password123

Proses Login

  1. Input NIP (Nomor Induk Pegawai)
  2. Input Password
  3. (Optional) Check "Ingat saya di perangkat ini" untuk Remember Me
  4. Click "Login"
  5. Redirect ke /welcome setelah berhasil

Logout

  1. Di welcome page, klik button "Logout" di sidebar
  2. Session akan dihapus
  3. Redirect kembali ke /login

📝 Testing Credentials

User-user yang sudah ada di database dan sudah ter-hash passwordnya:

Nama NIP Password* Role
Prawidya Destarianto, S.Kom, M.T 19801212 200501 1 001 password123 dosen
(Dan 7 Dosen lainnya) ... (Hashed) dosen
(Dan 8 Staff/Teknisi) ... (Hashed) staff

*Password telah di-hash dengan Bcrypt melalui command php artisan app:hash-passwords


🔐 Security Features

CSRF Protection - @csrf di form Password Hashing - Bcrypt algorithm Session Management - Laravel session driver Remember Token - Persistent login support Input Validation - Server-side validation Error Handling - User-friendly error messages Protected Routes - Middleware 'auth' pada /welcome


📁 File Structure

app/
  ├── Http/Controllers/
  │   ├── AuthController.php (NEW)
  │   └── WelcomeController.php (UPDATED)
  ├── Models/
  │   ├── UserDosen.php (UPDATED - implements Authenticatable)
  │   ├── UserStaff.php (UPDATED - implements Authenticatable)
  │   └── Attendance.php (NEW)
  └── Console/Commands/
      ├── HashExistingPasswords.php (NEW)
      └── ResetUserPassword.php (NEW)

resources/views/
  └── auth/
      └── login.blade.php (NEW)

routes/
  └── web.php (UPDATED)

config/
  └── auth.php (UPDATED - set AUTH_MODEL to UserDosen)

database/
  ├── migrations/
  │   ├── 2026_05_19_000000_add_remember_token_to_users.php (NEW)
  │   └── 2026_04_15_000001_create_attendances_table.php (EXISTS)

🛠️ Setup Commands

1. Hash Existing Passwords

php artisan app:hash-passwords

Output: Hashes all plain text passwords in both UserDosen and UserStaff tables

2. Reset Specific User Password

php artisan app:reset-password "19801212 200501 1 001" "newpassword" --type=dosen

3. Run Migrations

php artisan migrate

4. Clear Config Cache

php artisan config:cache
php artisan config:clear

🎨 Design Highlights

Login Form Design

  • Header: JTI logo + branding
  • Info Section: Demo account credentials (teal background)
  • NIP Field: Full width input dengan placeholder
  • Password Field:
    • Input dengan placeholder
    • Toggle button untuk show/hide password
  • Remember Me: Checkbox dengan label
  • Submit Button: Gradient purple with hover effect
  • Footer: Divider + "Hubungi Administrator" link
  • Animations: Smooth slide-up on load, fade-in alerts

Color Scheme

Primary Gradient: #4f46e5 → #7c3aed (Purple/Indigo)
Brand Color: #0f766e (Teal)
Background: Gradient teal/orange with white panels
Error: #c2410c (Orange)
Success: #16a34a (Green)

🔄 Flow Diagram

User visits /login
    ↓
Show login form
    ↓
Input NIP + Password
    ↓
AuthController->login()
    ↓
Search UserDosen OR UserStaff by NIP
    ↓
Verify password with Hash::check()
    ↓
If valid: Create session + redirect to /welcome
If invalid: Show error message
    ↓
At /welcome: Display user data + attendance chart
    ↓
Click Logout: Clear session + redirect to /login

Important Notes

  1. Password Hashing: Semua passwords di database sudah di-hash dengan Bcrypt
  2. Authentication Guard: Default guard adalah 'web' (session-based)
  3. User Model: Config menggunakan UserDosen sebagai default auth model
  4. Attendance Table: Kosong saat awal, data akan ter-populate saat user check-in/check-out
  5. Remember Token: Diperlukan jika menggunakan "Remember Me" feature

🔧 Troubleshooting

Login Gagal dengan Error "NIP atau password tidak sesuai"

  • Pastikan NIP benar (case-sensitive)
  • Pastikan password sesuai dengan yang di-hash di database
  • Gunakan command php artisan app:reset-password untuk reset password

"Class not found" Error

  • Jalankan php artisan config:cache && php artisan config:clear
  • Pastikan semua migrations sudah di-run: php artisan migrate

Welcome Page Tidak Bisa Diakses

  • Pastikan user sudah login (check session cookie)
  • Pastikan middleware 'auth' aktif pada route

📞 Support Credentials untuk Testing

Untuk membuat user baru dengan password yang ter-hash:

# Approach 1: Reset password untuk existing user
php artisan app:reset-password "NIP_USER" "password_baru" --type=dosen

# Approach 2: Buat seeder baru untuk user test
# Edit database/seeders/DatabaseSeeder.php

Future Enhancements

Rekomendasi fitur yang bisa ditambahkan:

  • Forgot Password functionality
  • Two-factor authentication
  • Password strength meter di form
  • Login history/audit log
  • User role-based access control
  • Account lockout setelah failed login attempts
  • Email verification

Created: May 19, 2026 Status: Production Ready