public function authenticate()
    {
        $user = $this->findUser();

        if ($user === false) {
            return new AuthenticationResult(
                AuthenticationResult::FAILURE_IDENTITY_NOT_FOUND,
                array(),
                array('User not found.')
            );
        }

        $validationResult = $this->passwordValidator->isValid(
            $this->credential, $user[$this->credentialColumn], $user[$this->identityColumn]
        );

        if ($validationResult->isValid()) {
            // Don't store password in identity
            unset($user[$this->getCredentialColumn()]);

            return new AuthenticationResult(AuthenticationResult::SUCCESS, $user, array());
        }

        return new AuthenticationResult(
            AuthenticationResult::FAILURE_CREDENTIAL_INVALID,
            array(),
            array('Invalid username or password provided')
        );
    }