2016-11-05 10 views
0

Я пытаюсь создать REST API с помощью Symfony 3.1 и FOSRestBundle, FOSUserBundle и FOSOAuthServerBundle. Мне удалось добиться этого, следуя руководству: https://gist.github.com/tjamps/11d617a4b318d65ca583.FOSOAuthServerBundle: Недопустимый параметр или параметр grant_type отсутствует

Я сейчас борюсь за процесс аутентификации. Когда я сделать запрос POST к серверу для аутентификации (для локального хоста: 8000/OAuth/v2/маркеров) с параметрами, закодированных в формате JSON в теле запроса:

{ 
    "grant_type": "password", 
    "client_id": "1_myveryverysecretkey", 
    "client_secret": "myveryverymostsecretkey", 
    "username": "theuser", 
    "password": "thepassword" 
} 

Дополнительные заголовки HTTP являются следующими:

Accept: application/json 
Cache-Control: no-store, private 
Connection: close 
Content-Type: */json 

клиент в таблице БД oauth2_client имеет «пароль» grant_type a:1:{i:0;s:8:"password";}, как это было предложено в руководстве.

Сервер принимает запрос, но я всегда получаю ответ

{"error":"invalid_request","error_description":"Invalid grant_type parameter or parameter missing"} 

Любые предложения, что мне не хватает? Благодаря!

+0

Не существует ли кто-нибудь, у кого может быть намек? – RalphP

ответ

0

У меня была та же проблема. Кажется, fosOAuthBundle не принимает json. если вы отправляете запрос с полями формы, он будет работать.

0

Это потому, что FOSRestBundle использует прослушиватель тела, который преобразует подчеркнутые ключи в случай верблюда. Таким образом, параметры, которые получает ваш сервер OAuth2, не grant_type, а grantType, который он не может обработать, и поэтому он дает вам эту ошибку.

Решение для этого было бы использовать пользовательский нормализатор массива на слушателе тела fos rest.