SSO non funziona per me

Sto avendo problemi con il mio SSO, dice che non c’è 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 non trovato nel 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 di ritorno SSO non trovato nel 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();

    // questo dovrebbe essere lo stesso nel tuo codice e nelle impostazioni di Discourse:
    $secret = 'removed';
    $sso->setSecret( $secret );

    // carica il payload passato da Discourse
    $payload = $_GET['sso'];
    $signature = $_GET['sig'];

    // valida il payload
    if (!($sso->validatePayload($payload,$signature))) {
        // non valido, nega l'accesso
        header("HTTP/1.1 403 Forbidden");
        echo("Richiesta SSO errata");
        die();
    }

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

    // Inserisci qui il tuo codice di autenticazione dell'utente ...

    // Obbligatorio e deve essere unico per la tua applicazione
    $userId = $myu->id;
    // Obbligatorio e deve essere coerente con la tua applicazione
    $userEmail = $myu->email;

    // Opzionale - se non imposti questi, Discourse genererà suggerimenti
    // basati sull'indirizzo email

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

    // costruisci la stringa di query e reindirizza al sito Discourse
    $query = $sso->getSignInString($nonce, $userId, $userEmail, $extraParameters);
    header('Location: http://forum.bloxplays.com/session/sso_login?' . $query);
    exit(0);
    ?>

Esplora questo argomento per verificare se il tuo codice SSO esegue tutte le operazioni necessarie: Single-Sign-On ufficiale per Discourse (sso).

Se attivi l’impostazione del sito verbose sso logging, verranno visualizzati ulteriori dettagli sulle richieste di accesso SSO nei log degli errori del tuo sito. Per visualizzare i log degli errori, vai su Admin / Logs e fai clic sull’voce “Error Logs” nel menu di navigazione dell’amministratore. Le voci di log pertinenti inizieranno con il testo “Verbose SSO log.” Se noti errori nei log non chiari, sentiti libero di pubblicarli qui.