SSO funktioniert bei mir nicht

Ich habe Probleme mit meinem SSO. Es wird angezeigt, dass keine external_Id vorhanden ist.

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

    // dies sollte in deinem Code und in deinen Discourse-Einstellungen identisch sein:
    $secret = 'removed';
    $sso->setSecret( $secret );

    // Lade die von Discourse übergebene Payload
    $payload = $_GET['sso'];
    $signature = $_GET['sig'];

    // Validiere die Payload
    if (!($sso->validatePayload($payload,$signature))) {
        // Ungültig, Zugriff verweigern
        header("HTTP/1.1 403 Forbidden");
        echo("Ungültige SSO-Anfrage");
        die();
    }

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

    // Füge hier deinen Benutzerauthentifizierungscode ein ...

    // Erforderlich und muss für deine Anwendung eindeutig sein
    $userId = $myu->id;
    // Erforderlich und muss mit deiner Anwendung konsistent sein
    $userEmail = $myu->email;

    // Optional – wenn du diese nicht festlegst, generiert Discourse Vorschläge
    // basierend auf der E-Mail-Adresse

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

    // Baue die Abfragezeichenkette und leite zurück zur Discourse-Seite um
    $query = $sso->getSignInString($nonce, $userId, $userEmail, $extraParameters);
    header('Location: http://forum.bloxplays.com/session/sso_login?' . $query);
    exit(0);
    ?>

Schauen Sie sich dieses Thema an, um zu prüfen, ob Ihr SSO-Code alles tut, was er muss: Offizielles Single-Sign-On für Discourse (sso).

Wenn Sie die Site-Einstellung verbose sso logging aktivieren, werden zusätzliche Details zu den SSO-Anmeldeanfragen in den Fehlerprotokollen Ihrer Site angezeigt. Um Ihre Fehlerprotokolle anzuzeigen, gehen Sie zu Admin / Logs und klicken Sie im Admin-Navigationsmenü auf den Eintrag “Error Logs”. Die relevanten Protokolleinträge beginnen mit dem Text “Verbose SSO log.” Wenn Sie in den Protokollen unklare Fehler sehen, können Sie diese gerne hier posten.