Heim  >  Fragen und Antworten  >  Hauptteil

Twitter OAuth 2.0-Fehlermeldung „Der übergebene Tokenwert ist ungültig“

Bearbeiten: Sehen Sie sich die Lösung an. Das Problem liegt in der Art und Weise, wie die Twitter-Bibliothek instanziiert wird.

Ich versuche, eine Twitter-Autorisierung mit OAuth2 zu erhalten. Ich kann es in einem einfachen Testskript zum Laufen bringen, aber wenn ich versuche, es in meinem WordPress-Plugin zu verwenden, funktioniert es nicht.

Ich verwende den OAuth2-Client von PHP League und eine Bibliothek, die ich geschrieben habe, um ihn mit Twitter zu verbinden; das Testskript befindet sich in der Readme-Datei.

Das Testskript speichert den OAuth2-Status in $_SESSION; die eigentliche Anwendung speichert ihn in einem WordPress-Transienten. Ich habe die Integrität der Daten über die Pipe bestätigt:

Daten aus der Twitter-Bibliothek nach Generierung der Authentifizierungs-URL:

Array
(
    [url] => https://twitter.com/i/oauth2/authorize?redirect_uri=https%3A%2F%2Fsmol.blog%2Fwp-json%2Fsmolblog%2Fv2%2Fconnect%2Fcallback%2Ftwitter&code_challenge=EV7BCVYmkvCnIlVLH6cVzrvjNloQlleAkkYwLLgg41w&code_challenge_method=S256&state=fd5824ef415aa325f1f68d3504bb16b3&scope=tweet.read%20users.read%20offline.access&response_type=code&approval_prompt=auto&client_id=MjVXMnRGVUN5Ym5lcVllcTVKZkk6MTpjaQ
    [state] => fd5824ef415aa325f1f68d3504bb16b3
    [verifier] => u7Zbf1gVEFZLyTgr_2Hk~i5P2pt8VgicyhZgdeO0pAyIZqhSoYqglHaIxsNRjHz0AHpwhlU1~Q
)

Daten, die während des Rückrufs vorübergehend aus WordPress extrahiert wurden (etwas anders gespeichert):

Array
(
    [id] => fd5824ef415aa325f1f68d3504bb16b3
    [userId] => 1
    [info] => Array
        (
                [verifier] => u7Zbf1gVEFZLyTgr_2Hk~i5P2pt8VgicyhZgdeO0pAyIZqhSoYqglHaIxsNRjHz0AHpwhlU1~Q
        )

)

Fordern Sie das Objekt vom Twitter-Token-Endpunkt an:

GuzzleHttp\Psr7\Request Object
(
        [method:GuzzleHttp\Psr7\Request:private] => POST
    [requestTarget:GuzzleHttp\Psr7\Request:private] => 
    [uri:GuzzleHttp\Psr7\Request:private] => GuzzleHttp\Psr7\Uri Object
        (
                [scheme:GuzzleHttp\Psr7\Uri:private] => https
            [userInfo:GuzzleHttp\Psr7\Uri:private] => 
            [host:GuzzleHttp\Psr7\Uri:private] => api.twitter.com
            [port:GuzzleHttp\Psr7\Uri:private] => 
            [path:GuzzleHttp\Psr7\Uri:private] => /2/oauth2/token
            [query:GuzzleHttp\Psr7\Uri:private] => 
            [fragment:GuzzleHttp\Psr7\Uri:private] => 
            [composedComponents:GuzzleHttp\Psr7\Uri:private] => 
        )

    [headers:GuzzleHttp\Psr7\Request:private] => Array
        (
                [Host] => Array
                (
                        [0] => api.twitter.com
                )

            [content-type] => Array
                (
                        [0] => application/x-www-form-urlencoded
                )

            [Authorization] => Array
                (
                        [0] => Basic [base64-encoded app id and secret redacted]
                )

        )

    [headerNames:GuzzleHttp\Psr7\Request:private] => Array
        (
                [content-type] => content-type
            [host] => Host
            [authorization] => Authorization
        )

    [protocol:GuzzleHttp\Psr7\Request:private] => 1.1
    [stream:GuzzleHttp\Psr7\Request:private] => GuzzleHttp\Psr7\Stream Object
        (
                [stream:GuzzleHttp\Psr7\Stream:private] => Resource id #101
            [size:GuzzleHttp\Psr7\Stream:private] => 
            [seekable:GuzzleHttp\Psr7\Stream:private] => 1
            [readable:GuzzleHttp\Psr7\Stream:private] => 1
            [writable:GuzzleHttp\Psr7\Stream:private] => 1
            [uri:GuzzleHttp\Psr7\Stream:private] => php://temp
                [customMetadata:GuzzleHttp\Psr7\Stream:private] => Array
                    (

                )

            )

    )

Text der obigen Anfrage:

client_id=MjVXMnRGVUN5Ym5lcVllcTVKZkk6MTpjaQ&client_secret=[redacted]&grant_type=authorization_code&code=aTVUMDkybzdsVmExOEQ5MjdrVjVOQVZ3YTVDbUdmTXRDMktZSzBaSGFqVk5LOjE2NjUzNjc1MjIyNjg6MToxOmFjOjE&code_verifier=u7Zbf1gVEFZLyTgr_2Hk~i5P2pt8VgicyhZgdeO0pAyIZqhSoYqglHaIxsNRjHz0AHpwhlU1~Q

Fehler:

PHP Fatal error:  Uncaught League\OAuth2\Client\Provider\Exception\IdentityProviderException: Value passed for the token was invalid. in /var/www/html/wp-content/plugins/smolblog-wp/vendor/smolblog/oauth2-twitter/src/Twitter.php:169

Ich weiß, dass mir hier etwas Dummes entgeht. Aber ich kann beim besten Willen nicht herausfinden, Was. In der realen Anwendung gibt es viel mehr Code als im Testskript, aber ich habe die Daten an mehreren Stellen im Stapel überprüft, auch bevor ich sie an Twitter gesendet habe. Muss ich noch etwas testen oder habe ich etwas vergessen?

P粉865900994P粉865900994282 Tage vor694

Antworte allen(1)Ich werde antworten

  • P粉155710425

    P粉1557104252023-12-17 00:47:56

    发现错误。在测试脚本中,redirectUri 被传递到 OAuth2 客户端的构造函数中;在应用程序中,它被传递到 getAuthorizationUrl 函数中。这适用于对 Twitter 的初始调用,但(显然)getAccessToken 调用也需要该数据。所以这是修复方法。

    又老又破:

    new Twitter([
        'clientId' => $app->env->twitterAppId ?? '',
        'clientSecret' => $app->env->twitterAppSecret ?? '',
    ])
    

    新热点:

    new Twitter([
        'clientId' => $app->env->twitterAppId ?? '',
        'clientSecret' => $app->env->twitterAppSecret ?? '',
        'redirectUri' => "{$app->env->apiBase}connect/callback/twitter",
    ])
    

    Antwort
    0
  • StornierenAntwort