Angular ng2-ui-auth и Lumen Socialite не соответствуют запросу POST - PullRequest
0 голосов
/ 19 мая 2018

ng2-ui-auth настроен так

Ng2UiAuthModule.forRoot({
  baseUrl:'http://localhost:8000',
  loginUrl: '/api/auth/login',
  providers: {
    google: {
      clientId: '....',
      url: '/api/auth/google'
    }
  }
})

при отправке данных сеанса на сервер это полезная нагрузка POST

{
"authorizationData": {
    //the same data sent to the auth endpoint
},
"oauthData": {
    //the data received from the oauth endpoint
},
"userData": {
    //additional data you've provided
}

}

как в 8.0.0 ng2-ui-auth changelog

Однако Socialite в среде Lumen ожидает оба поля code и redirect_uri в корне объекта, в противном случае выдается следующая ошибка

{"message": "Ошибка клиента: POST https:\/\/accounts.google.com\/o\/oauth2\/token привела к ответу 400 Bad Request: \ n {\ n \" error \ ": \" invalid_request \ ", \ n \" error_description \": \" Отсутствует обязательный параметр: code \ "\ n} \ n", "code": 400, "status_code": 500}

Я не смог найти ничего в документации.

Мне не хватает какой-либо конфигурации?Кто-нибудь решил эту проблему?

Заранее спасибо

1 Ответ

0 голосов
/ 11 октября 2018

Эта проблема довольно старая, но это решение может помочь другим людям, которые сталкивались с этой.

Вот что мы сделали в нашей части Lumen API:

// Due to the changes in ng2-ui-auth (Angular) we set the fiels to the right place
if (!$request->has('code'))
    $request->request->add(['code' => $request->input('oauthData.code')]);
if (!$request->has('redirect_uri'))
    $request->request->add(['redirect_uri' => $request->input('authorizationData.redirect_uri')]);

// Retrieve the redirectUri
$redirectUri = $request->has('redirectUri') ? $request->get('redirectUri') : $request->get('redirect_uri');

// Inits using the google (stateless) driver
$provider = Socialite::with('google');
$provider->redirectUrl($redirectUri);
$provider->stateless();

На самом деле произошло следующее: с новым ng2-ui-auth (v8 +) код и redirect_uri поменялись местами.Поэтому здесь мы просто поместили их в нужное место (на случай, если оно больше не изменится), и мы также убедимся, что оно работает со старыми версиями.Разумеется, не забывайте хранить stateless (), поскольку lumen не обрабатывает сессии.

...