update($userId, [ 'reset_token' => $token, 'reset_expires_at' => $expiresAt, ]); return $token; } /** * Проверка токена сброса пароля * * @param string $token Токен сброса * @return array|null Данные пользователя или null если токен недействителен */ public function verifyResetToken(string $token): ?array { $user = $this->where('reset_token', $token)->first(); if (!$user) { return null; } // Проверяем срок действия токена if (empty($user['reset_expires_at'])) { return null; } if (strtotime($user['reset_expires_at']) < time()) { return null; } return $user; } /** * Очистка токена сброса пароля * * @param int $userId ID пользователя * @return bool */ public function clearResetToken(int $userId): bool { return $this->update($userId, [ 'reset_token' => null, 'reset_expires_at' => null, ]); } /** * Поиск пользователя по email * * @param string $email Email адрес * @return array|null */ public function findByEmail(string $email): ?array { return $this->where('email', $email)->first(); } }