Как отправить параметры в функцию обратного вызова? люмен 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').'&notification_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.

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

0 ответов

Другие вопросы по тегам