SSO не работает у меня

У меня возникли проблемы с SSO, система сообщает об отсутствии 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 не найден в полезной нагрузке');
            }

            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 возврата SSO не найден в полезной нагрузке');
            }

            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();

    // это должно совпадать в вашем коде и в настройках Discourse:
    $secret = 'removed';
    $sso->setSecret( $secret );

    // загрузите полезную нагрузку, переданную Discourse
    $payload = $_GET['sso'];
    $signature = $_GET['sig'];

    // проверьте полезную нагрузку
    if (!($sso->validatePayload($payload,$signature))) {
        // невалидно, отказать
        header("HTTP/1.1 403 Forbidden");
        echo("Некорректный запрос SSO");
        die();
    }

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

    // Вставьте сюда код аутентификации пользователя ...

    // Обязательно и должно быть уникальным для вашего приложения
    $userId = $myu->id;
    // Обязательно и должно быть согласовано с вашим приложением
    $userEmail = $myu->email;

    // Опционально — если вы не установите эти параметры, Discourse сгенерирует предложения
    // на основе адреса электронной почты

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

    // сформируйте строку запроса и перенаправьте обратно на сайт Discourse
    $query = $sso->getSignInString($nonce, $userId, $userEmail, $extraParameters);
    header('Location: http://forum.bloxplays.com/session/sso_login?' . $query);
    exit(0);
    ?>

Просмотрите эту тему, чтобы убедиться, что ваш код SSO выполняет все необходимые функции: Официальная система единого входа для Discourse (sso).

Если вы включите настройку сайта verbose sso logging, в логах ошибок вашего сайта будут отображаться дополнительные сведения о запросах входа через SSO. Чтобы просмотреть логи ошибок, перейдите в раздел Администрирование / Логи и выберите пункт «Логи ошибок» в меню навигации администратора. Соответствующие записи в логах будут начинаться с текста «Verbose SSO log». Если вы обнаружите в логах непонятные ошибки, вы можете опубликовать их здесь.