Le plugin oauth2-basic peut-il convertir du texte en JSON ?

Pour me connecter avec un compte WECHAT, j’ai essayé d’utiliser le plugin oatuh2-basic mais j’ai rencontré un problème.

Normalement, le serveur WECHAT devrait retourner application/json, puis le plugin peut lire l’USID dans la chaîne json.

Malheureusement, le serveur retourne juste text/plain, qui ne peut pas être lu par le plugin.

Voici le résultat. L’un s’est connecté avec succès avec WEIBO, et l’autre a essayé de se connecter avec WECHAT mais a échoué.

J’ai essayé de modifier le code du plugin mais j’ai échoué, car je n’ai aucune idée de comment gérer le langage ruby.

Quelqu’un peut-il me dire où le code doit être modifié ? Ou y a-t-il une possibilité que le plugin puisse être mis à jour ?

Voici la trace d’appels

Message

(oauth2_basic) Échec de l'authentification ! invalid_credentials: OAuth2::Error, {\"access_token\":\"60_xf-0xS4znmnu9z-2ZDhNN40RRluErfbiThzzoDz9p8-Ki9pH-A3ML2n3q6UhT7D6d6iCXlEVS5B7kGFsnhW2JHq6eXHNWOgzqXqMsAvhfY4\",\"expires_in\":7200,\"refresh_token\":\"60_gfsBHpp0btOnWaZpnRXMywNTzDURCymRtw8sQj21XXC99aebh58Mb4vBGiKaXdYqDGkdovn2ytFoiqavsSWHLt_UiExbkPYA0z-4DBVjDlA\",\"openid\":\"o01u45oBVM2YbPzmxXau263z_iW4\",\"scope\":\"snsapi_base\"}

Backtrace

/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/omniauth-1.9.2/lib/omniauth/strategy.rb:163:in `log'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/omniauth-1.9.2/lib/omniauth/strategy.rb:486:in `fail!'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/omniauth-oauth2-1.7.2/lib/omniauth/strategies/oauth2.rb:96:in `rescue in callback_phase'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/omniauth-oauth2-1.7.2/lib/omniauth/strategies/oauth2.rb:84:in `callback_phase'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/omniauth-1.9.2/lib/omniauth/strategy.rb:238:in `callback_call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/omniauth-1.9.2/lib/omniauth/strategy.rb:189:in `call!'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/omniauth-1.9.2/lib/omniauth/strategy.rb:169:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/omniauth-1.9.2/lib/omniauth/strategy.rb:192:in `call!'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/omniauth-1.9.2/lib/omniauth/strategy.rb:169:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/omniauth-1.9.2/lib/omniauth/strategy.rb:192:in `call!'

Env

HTTP HOSTS: frps.southdog.cool

Donnez une direction à mes compatriotes chinois. Dans le fichier containers/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/oauth2-1.4.7/lib/oauth2/response.rb, il y a le code suivant :

    # Content type assignments for various potential HTTP content types.
    @@content_types = {
      'application/json' => :json,
      ………………
      'text/plain' => :text,
    }

Changez-le comme suit :

'text/plain' => :json,

Bien sûr, cela ne sera utile que pour WeChat, car seul WeChat renvoie du texte.