SSO não está funcionando para mim

Estou tendo problemas com meu SSO. Ele diz que não há external_id.

PHP:

<?php
    $user = $_SESSION['username'];
    try {
    	$handler = new PDO('mysql:host=localhost;dbname=removed', 'removed', 'removed');
    	$handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch(PDOException $e) {
    	echo $e->getMessage();
    	die();
    }
    $conn = mysql_connect("localhost", "removed", "removed");
    mysql_select_db("removed");
    if ($user) {
    $myusr = $handler->query("SELECT * FROM users WHERE username='".$user."'");
    $myu = $myusr->fetch(PDO::FETCH_OBJ);
    if ($myu->banned == "1") {
        header('Location: https://bloxplays.com/suspended');
    }
    $userExist = ($myusr->rowCount());
    if ($userExist == "0") {
    session_destroy();
    header("Location: ../");
    } else {
        $ID = $myu->id;
    }
    }
    echo "<title>".$ID."</title>";
    namespace Cviebrock\DiscoursePHP;

    use Cviebrock\DiscoursePHP\Exception\PayloadException;


    class SSOHelper
    {

        /**
         * @var
         */
        private $secret;

        /**
         * @param $secret
         * @return $this
         */
        public function setSecret($secret)
        {
            $this->secret = $secret;

            return $this;
        }

        /**
         * @param $payload
         * @param $signature
         * @return mixed
         */
        public function validatePayload($payload, $signature)
        {
            $payload = urldecode($payload);

            return $this->signPayload($payload) === $signature;
        }

        /**
         * @param $payload
         * @return mixed
         * @throws PayloadException
         */
        public function getNonce($payload)
        {
            $payload = urldecode($payload);
            $query = array();
            parse_str(base64_decode($payload), $query);
            if (!array_key_exists('nonce', $query)) {
                throw new PayloadException('Nonce não encontrado no payload');
            }

            return $query['nonce'];
        }

        /**
         * @param $payload
         * @return mixed
         * @throws PayloadException
         */
        public function getReturnSSOURL($payload)
        {
            $payload = urldecode($payload);
            $query = array();
            parse_str(base64_decode($payload), $query);
            if (!array_key_exists('return_sso_url', $query)) {
                throw new PayloadException('URL de retorno do SSO não encontrada no payload');
            }

            return $query['return_sso_url'];
        }

        /**
         * @param $nonce
         * @param $id
         * @param $email
         * @param array $extraParameters
         * @return string
         */
        public function getSignInString($nonce, $id, $email, $extraParameters = [])
        {

            $parameters = array(
                    'nonce'       => $nonce,
                    'external_id' => $id,
                    'email'       => $email,
                ) + $extraParameters;

            $payload = base64_encode(http_build_query($parameters));

            $data = array(
                'sso' => $payload,
                'sig' => $this->signPayload($payload),
            );

            return http_build_query($data);
        }

        /**
         * @param $payload
         * @return string
         */
        protected function signPayload($payload)
        {
            return hash_hmac('sha256', $payload, $this->secret);
        }
    }
    ?>

    <?php

    $sso = new SSOHelper();

    // isso deve ser o mesmo no seu código e nas configurações do Discourse:
    $secret = 'removed';
    $sso->setSecret( $secret );

    // carrega o payload passado pelo Discourse
    $payload = $_GET['sso'];
    $signature = $_GET['sig'];

    // valida o payload
    if (!($sso->validatePayload($payload,$signature))) {
        // inválido, negar
        header("HTTP/1.1 403 Forbidden");
        echo("Solicitação SSO inválida");
        die();
    }

    $nonce = $sso->getNonce($payload);

    // Insira seu código de autenticação de usuário aqui ...

    // Obrigatório e deve ser exclusivo para sua aplicação
    $userId = $myu->id;
    // Obrigatório e deve ser consistente com sua aplicação
    $userEmail = $myu->email;

    // Opcional - se você não definir estes, o Discourse gerará sugestões
    // com base no endereço de e-mail

    $extraParameters = array(
        'username' => $myu->username,
        'name'     => $myu->username
    );

    // constrói a string de consulta e redireciona de volta para o site do Discourse
    $query = $sso->getSignInString($nonce, $userId, $userEmail, $extraParameters);
    header('Location: http://forum.bloxplays.com/session/sso_login?' . $query);
    exit(0);
    ?>

Dê uma olhada neste tópico para verificar se o seu código SSO está fazendo tudo o que precisa: Single-Sign-On Oficial para Discourse (sso).

Se você ativar a configuração do site verbose sso logging, detalhes adicionais sobre as solicitações de login SSO serão exibidos nos logs de erro do seu site. Para visualizar os logs de erro, vá em Admin / Logs e clique na entrada “Error Logs” no menu de navegação do administrador. As entradas de log relevantes começarão com o texto “Verbose SSO log.” Se você vir erros nos logs que não estejam claros, sinta-se à vontade para postá-los aqui.