middleware(['api', 'auth:api'], ['except' => ['login']]); } public function login(Request $request) { $validator = Validator::make($request->all(), [ 'email' => 'required|email', 'password' => 'required|string|min:6', ]); if ($validator->fails()) { return response()->json($validator->errors(), 422); } if (!$token = auth('api')->attempt($validator->validated())) { return response()->json(['error' => 'Unauthorized'], 401); } return $this->createNewToken($token); } public function logout(Request $request) { Auth::guard('admin')->logout(); $request->session()->invalidate(); $request->session()->regenerateToken(); return redirect()->route('login'); } public function refresh() { $user = auth('sanctum')->user(); // Ensure this is correct if (!$user) { return response()->json(['error' => 'User not found'], 404); } $token = $user->createToken('YourAppName')->plainTextToken; // Create a new token return response()->json(['access_token' => $token], 200); } public function userProfile() { return response()->json(auth('api')->user()); } public function updatePassword(Request $request) { try { $validator = Validator::make($request->all(), [ 'current_password' => 'required', 'new_password' => 'required|min:6', 'confirm_password' => 'required|same:new_password', ], [ 'current_password.required' => 'Password saat ini harus diisi', 'new_password.required' => 'Password baru harus diisi', 'new_password.min' => 'Password baru minimal 6 karakter', 'confirm_password.required' => 'Konfirmasi password harus diisi', 'confirm_password.same' => 'Konfirmasi password tidak cocok', ]); if ($validator->fails()) { return response()->json([ 'status' => false, 'message' => 'Validasi gagal', 'errors' => $validator->errors() ], 422); } $user = auth('api')->user(); if (!$user) { return response()->json([ 'status' => false, 'message' => 'User tidak ditemukan' ], 404); } // Verify current password if (!Hash::check($request->current_password, $user->password)) { return response()->json([ 'status' => false, 'message' => 'Password saat ini tidak sesuai' ], 400); } // Check if new password is same as current password if (Hash::check($request->new_password, $user->password)) { return response()->json([ 'status' => false, 'message' => 'Password baru tidak boleh sama dengan password saat ini' ], 400); } // Update password $user->password = Hash::make($request->new_password); $saved = $user->save(); if (!$saved) { return response()->json([ 'status' => false, 'message' => 'Gagal menyimpan password baru' ], 500); } return response()->json([ 'status' => true, 'message' => 'Password berhasil diperbarui' ], 200); } catch (\Exception $e) { \Log::error('Password update error: ' . $e->getMessage()); return response()->json([ 'status' => false, 'message' => 'Terjadi kesalahan: ' . $e->getMessage() ], 500); } } protected function createNewToken($token) { return response()->json([ 'access_token' => $token, 'token_type' => 'bearer', 'expires_in' => config('sanctum.expiration') * 60, 'user' => auth('api')->user() ]); } }