265 lines
6.8 KiB
Markdown
265 lines
6.8 KiB
Markdown
# 📋 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
|
|
```bash
|
|
php artisan app:hash-passwords
|
|
```
|
|
Output: Hashes all plain text passwords in both UserDosen and UserStaff tables
|
|
|
|
### 2. Reset Specific User Password
|
|
```bash
|
|
php artisan app:reset-password "19801212 200501 1 001" "newpassword" --type=dosen
|
|
```
|
|
|
|
### 3. Run Migrations
|
|
```bash
|
|
php artisan migrate
|
|
```
|
|
|
|
### 4. Clear Config Cache
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
# 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
|