SSO no funciona para mí

Estoy teniendo problemas con mi SSO; dice que no hay 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 not found in 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('Return SSO URL not found in 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();

    // esto debe ser el mismo en tu código y en la configuración de Discourse:
    $secret = 'removed';
    $sso->setSecret( $secret );

    // carga el payload pasado por Discourse
    $payload = $_GET['sso'];
    $signature = $_GET['sig'];

    // valida el payload
    if (!($sso->validatePayload($payload,$signature))) {
        // inválido, denegar
        header("HTTP/1.1 403 Forbidden");
        echo("Solicitud SSO incorrecta");
        die();
    }

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

    // Inserta aquí tu código de autenticación de usuario ...

    // Requerido y debe ser único para tu aplicación
    $userId = $myu->id;
    // Requerido y debe ser consistente con tu aplicación
    $userEmail = $myu->email;

    // Opcional: si no estableces estos, Discourse generará sugerencias
    // basadas en la dirección de correo electrónico

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

    // construye la cadena de consulta y redirige de vuelta al sitio de Discourse
    $query = $sso->getSignInString($nonce, $userId, $userEmail, $extraParameters);
    header('Location: http://forum.bloxplays.com/session/sso_login?' . $query);
    exit(0);
    ?>

Revisa este tema para ver si tu código SSO realiza todas las funciones necesarias: Inicio de sesión único oficial para Discourse (sso).

Si activas la configuración del sitio verbose sso logging, se mostrarán detalles adicionales sobre las solicitudes de inicio de sesión SSO en los registros de errores de tu sitio. Para ver los registros de errores, ve a Administración / Registros y haz clic en la entrada “Registros de errores” en el menú de navegación de administración. Las entradas de registro relevantes comenzarán con el texto “Verbose SSO log”. Si ves errores en los registros que no están claros, siéntete libre de publicarlos aquí.