Laravel Socialite - ошибка входа в Google. Отсутствует обязательный параметр: client_id, хотя указан

У меня странная проблема с использованием Laravel Socialite для входа пользователей через Google API.

Все конфигурации кажутся нормальными и обычными, но я все время получаю ошибку Missing required parameter: client_id. Мало того, иногда я пытался снова, и ошибка становилась Missing required parameter: redirect_uri, несмотря на то, что были указаны все эти параметры.

Вот как это устроено:

service.php

'google' => [
        'client_id' => 'xxxxxxxxxx-x98asxxxx913ofk5tqvgq7lqfpgdi5u2.apps.googleusercontent.com',
        'client_secret' => 'mklOWJFhpbCzTKxxxx-xxxx',
        'redirect' => 'http://myapp.com/auth/google/callback'
    ],

routes.php

Route::get('/auth/{social_channel}', 'Auth\AuthController@redirect_to_provider');

Route::get('/auth/{social_channel}/callback', 'Auth\AuthController@handle_provider_callback');

AuthController.php

/**
     * Redirect the user to the Google authentication page.
     *
     * @return Response
     */
    public function redirect_to_provider($social_channel)
    {
        return Socialite::driver($social_channel)->redirect();
    }

    /**
     * Obtain the user information from GitHub.
     *
     * @return Response
     */
    public function handle_provider_callback($social_channel, SocialAccountService $service)
    {
        $user = $service->create_or_get_user($social_channel, Socialite::driver($social_channel)->user());

        Auth::login($user);

        return redirect()->to('/go');

    }

У меня работает вход в Facebook, просто проблема входа в Google - упрямая и причудливая.

Приложение развернуто на Forge (Ubuntu, Nginx).

Может ли кто-нибудь вообще заметить в этом что-то не так?


person nogias    schedule 15.05.2016    source источник
comment
Вы нашли решение?   -  person Volatil3    schedule 08.12.2016


Ответы (3)


При использовании функции env() в файле services.php необходимо использовать GOOGLE_CLIENT_ID и GOOGLE_CLIENT_SECRET в файле .env без пробелов.

GOOGLE_CLIENT_ID=xxxxxxxxxxxx    
GOOGLE_CLIENT_SECRET=xxxxxxxxxxxxxx

в файле служб используйте это

'client_id' => env('GOOGLE_CLIENT_ID'),         
'client_secret' => env('GOOGLE_CLIENT_SECRET'),
person Felipe Castillo    schedule 03.04.2018

Я только что решил ту же проблему, мое первое решение - передать client_id и secret в контроллер с помощью ->with(). Код выглядит так:

    return Socialite::driver('google')
    ->with(
        ['client_id' => 'xxxxxxxx'],
        ['client_secret' => 'xxxxxxxx'],
        ['redirect' => 'http://localhost:8000/Yourcallback'])
    ->redirect();

ИЛИ просто удалив env() на services.php

    'client_id' => env('xxxxxxx'),
    'client_secret' => env('xxxxxxx'),

с этим

'client_id' => 'xxxxxxx',
'client_secret' => 'xxxxxxx',

Похоже, что светская львица не распознает env() функцию.

person KirtJ    schedule 19.11.2018
comment
Я сделал как вы предлагаете, но без client_secret. Если вы добавляете client_secret, разве это не проблема безопасности? - person Vit; 15.04.2020

Для тех, кто использует Forge, вам может потребоваться добавить информацию Google .env на вкладке среды на панели Forge. Эта .env информация не передается через Github в Forge.

person Gass    schedule 03.06.2021