0

J'ai travaillé sur mon serveur dans Symfony 2.8, en construisant une API de repos qui renvoie des objets json dans le style camelCase, le problème est maintenant que quand j'intègre le paquet OauthServer, il lance cette erreur Invalid grant_type parameter or parameter missing" , Je comprends que cela arrive parce que j'utilise l'écouteur array_normalizer: fos_rest.normalizer.camel_keys dans ma configuration fos_rest. Voici mon code dans configuration.yml:FOSOAuthServerBundle + FOSRestBundle + CamelCase = Ne pas authentifier

fos_rest: 
    #other listeners# 
    body_listener: 
     array_normalizer: fos_rest.normalizer.camel_keys 
    zone: 
     - { path: ^/api } 

Et voici ma configuration OAuth dans le security.yml:

firewalls: 
    oauth_token: 
     pattern: ^/oauth/v2/token 
     security: false 
    api: 
     pattern: ^/api        
     fos_oauth: true        
     stateless: true        
     anonymous: false 

J'ai découvert que je n'étais pas la première personne qui ce soit jamais arrivé, et que l'attribut zone été ajouté pour atténuer cela, mais dans mon cas, il fonctionne uniquement avec tout sous le ^/api parce que quand je change le modèle il cesse d'utiliser les écouteurs comme prévu, mais quand j'appelle le chemin ^/oauth/v2/token il semble ignorer le chemin donné zone.

Pour récupérer mon jeton, j'utilise la prochaine requête POST:

{ 
    grant_type= "password" 
    client_id= "clientId" 
    client_secret= "clientSecret" 
    username= "user" 
    password= "password" 
} 

Je tiens à préciser que si je désactive l'auditeur j'obtenir le jeton avec succès, mais le reste de mon application cesse de fonctionner parce qu'il utilise camelCase partout, je sais qu'une fois l'alternative serait de sérialiser mes données du côté client, mais c'est assez compliqué pour le moment.

Qu'est-ce que je fais mal? Je ne peux pas comprendre ce que je manque.

Répondre

1

comme solution de contournement, vous pouvez utiliser au lieu de POST, GET comme celui-ci

http://example.com/oauth/v2/token?client_id=[CLIENT_ID]&client_secret=[SECRET]&grant_type=password&username=[USERNAME]&password=[PASSWORD] 

Ensuite, vous n'avez pas à vous soucier de serializers du corps.