public function authorizeWithEmail($hashedEmail, $hashedPassword, $remember = null, & $user = null)
    {
        // Status code
        $result = new EmailStatus(0);

        // Check if this email is registered
        if (dbQuery($this->dbTable)->where($this->dbHashEmailField, $hashedEmail)->first($user)) {
            $dbTable = $this->dbTable;

            $hashPasswordField = $dbTable::$_attributes[$this->dbHashPasswordField];
            // Check if passwords match
            if ($user[$hashPasswordField] === $hashedPassword) {
                $result = new EmailStatus(EmailStatus::SUCCESS_EMAIL_AUTHORIZE);

                // Login with current user
                $this->authorize($user, $remember);

            } else { // Wrong password
                $result = new EmailStatus(EmailStatus::ERROR_EMAIL_AUTHORIZE_WRONGPWD);
            }
        } else { // Email not found
            $result = new EmailStatus(EmailStatus::ERROR_EMAIL_AUTHORIZE_NOTFOUND);
        }

        // Call external authorize handler if present
        if (is_callable($this->authorizeHandler)) {
            // Call external handler - if it fails - return false
            if (!call_user_func_array($this->authorizeHandler, array(&$user, &$result))) {
                $result = new EmailStatus(EmailStatus::ERROR_EMAIL_AUTHORIZE_HANDLER);
            }
        }

        return $result;
    }