Как отправить параметры в функцию обратного вызова? люмен 5,5 - Laravel/Socialite - Google+
Я разрабатываю API с lumen 5.5, функциональность, которую я создаю в реестре с google +, для этого я использую пакет "laravel / socialite": "^ 3.0", на данный момент, следуя шагам документации, все было работает, но у меня есть что-то особенное, чего я не смог достичь, мне нужно отправить параметры в функцию обратного вызова, чтобы иметь возможность добавлять эти значения при создании пользователей.
В настоящее время это то, что я разработал:
Маршруты в web.php
$router->get('/redirect/{provider}', [ 'uses' => 'v1\SocialProviderController@redirectToProvider', 'middleware' => 'lang' ]);
$router->get('/callback/{provider}', [ 'uses' => 'v1\SocialProviderController@callback', 'middleware' => 'lang' ]);
SocialProviderController @ redirectToProvider
public function redirectToProvider(Request $request, $provider)
{
return Socialite::driver($provider)->stateless()->redirect();
}
SocialProviderController @ обратный вызов
public function callback(Request $request, $provider)
{
$langs = $request->langs;
// get user google data
$g_user = Socialite::driver($provider)->stateless()->user();
$user = User::where('email', $g_user->getEmail())->first();
If the user does not exist, a new one is created
if (!isset($user)) {
$user = new User();
$user->username = 'some-username'
$user->email = $g_user->getEmail();
$user->password = 'some-password'
$user->full_name = $g_user->getName();
$user->save();
}
// Make user login
$user->last_login_time = \Carbon\Carbon::now()->toDateTimeString();
// $user->device_os = $request->input('device_os');
// $user->notification_id = $request->input('notification_id');
$user->save();
$token = $user->createToken('G+ token', ['*'])->accessToken;
$response = getResponse(200, $langs, 'SocialProviderController@callback - Login successfull', 'social.success', $user);
$response['meta_data'] = array_add($response['meta_data'], 'access_token', $token);
$response['meta_data'] = array_add($response['meta_data'], 'token_type', 'Bearer');
return response()->json($response, $response['meta_data']['code']);
}
Мне нужно иметь возможность отправлять параметры "device_os" и "tification_id " в функцию обратного вызова, чтобы разложить строки, в которых эти значения назначаются пользователю при входе в систему, для этого я попробовал следующие два варианты но ни один из них не работал
1 - Используйте функцию "с" для отправки необязательных параметров. Согласно документации, эту функцию можно использовать для отправки параметров и позже в функции обратного вызова, но, очевидно, это не работает в драйвере google +, вот что вы пытаетесь:
в redirectToProvider:
public function redirectToProvider(Request $request, $provider)
{
return Socialite::driver($provider)
->with([
'device_os' => $request->input('device_os'),
'notification_id' => $request->input('notification_id')
])
->stateless()
->redirect();
}
в обратном вызове:
public function callback(Request $request, $provider)
{
dd($request->all());
}
при этом я не получаю параметры, отправленные в переменной $ request
2 - Настройте URL обратного вызова с помощью функции redirectUrl(). Обычно у нас есть URL обратного вызова в файле "config/services.php", но вы можете установить его с помощью функции redirectUrl(), а затем попробуйте выполнить следующее:
в redirectToProvider:
public function redirectToProvider (Запрос $ request, $ provider) {
$redirectUrl = env('APP_URL').env('G+_REDIRECT').'?device_os='.$request->input('device_os').'¬ification_id='.$request->input('notification_id');
return Socialite::driver($provider)
->redirectUrl($redirectUrl)
->stateless()
->redirect();
}
в обратном вызове:
public function callback(Request $request, $provider)
{
dd($request->all());
}
В этом случае он даже не перенаправляет меня успешно в представление проверки подлинности Google (я получаю ошибку неверного запроса 400), потому что URL-адрес должен точно соответствовать URL-адресу, определенному в клиенте Google, поскольку URL-адрес обратного вызова содержит переменные, которые я не могу Определите исправление в консоли разработчика Google.
Прояснив все это, мой вопрос будет, если что-то не так в любом из двух случаев, или если есть другой способ отправить эти параметры в функцию обратного вызова.