#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
должны быть сохранены каким-либо другим способом в функции обратного вызова. При сохранении, например, в базе данных вы можете использовать токены где угодно.