Использование пользователем Laravel Socialite возвращает отсутствующий код авторизации

#laravel #laravel-socialite #superoffice-api

#laravel #laravel-socialite #superoffice-api

Вопрос:

Я использую Laravel Socialite для входа в систему с помощью API SuperOffice. Только что добавил поставщика в качестве pr, но уже тестировал его. Я использую провайдера superoffice локально и внутри пакета superoffice-api , который я создаю. Добавили оба пакета в composer.json в приложении Laravel:

 "repositories": [
     {
         "type": "path",
         "url": "./packages/superoffice-api"
     },
     {
        "type": "path",
        "url": "./packages/superoffice"
     }
]
  

Также superoffice таким же образом добавлен поставщик Socialite в superoffice-api composer.json.

Процесс входа в систему работает, но проблема возникает при попытке использовать пользователя для других вызовов API. Я имею в виду, что при обратном вызове я могу сделать следующее:

 public function superofficeCallback(Request $request): RedirectResponse
{
     $user = Socialite::driver('superoffice')->stateless()->user();

     return redirect()->route('dashboard.index')->with([
         'message' => 'Loggedin with SuperOffice as '.$user->name,
         'success' => true,
      ]);
}
  

Это показывает $user->name , как и ожидалось. Теперь при попытке вызова Socialite::driver('superoffice')->stateless()->user() superoffice-api пакета я получаю следующее сообщение об ошибке:

Ошибка клиента: ошибка клиента: POST https://sod.superoffice.com/login/common/oauth/tokens привела к 400 Bad Request ответу: { «ошибка»: «invalid_request», «error_description»: «отсутствует код авторизации»}

Не имеет значения, вызывается ли он в методе или в __construct() классе.

Итак, мой вопрос в том, как я могу использовать superoffice пользователя поставщика Socialite в пакете superoffice-api ? Это необходимо для получения access_token . Можно себе представить, что, поскольку Socialite вызывается в пакете, какая-то ссылка отсутствует.

Ответ №1:

Проблема здесь в том, что access_token и refresh_token должны быть сохранены каким-либо другим способом в функции обратного вызова. При сохранении, например, в базе данных вы можете использовать токены где угодно.