Laravel Socialite с Google сохраняет другой идентификационный номер, вызывает повторяющуюся ошибку

У меня есть Laravel 5.2 и последняя версия Socialite для правильной работы с входом в Twitter и Facebook, но не с входом в Google.

С помощью Google пользователь может войти в систему в первый раз и попасть в базу данных. Однако, когда пользователь повторно пытается войти в систему после выхода, возникает проблема. В моей функции обратного вызова вызов getId () возвращает число, например 1048710206853583 #####. Однако в базе данных MySQL такой номер, как 92233720368547 #####, сохраняется после первого входа пользователя в систему в поле provider_id. Это происходит с одним единственным вызовом getId (), который я использую. Похоже, что Google возвращает два разных идентификатора. Могло ли это быть? Что я делаю не так?

public function redirectToProvider($provider = null)
{
    if(!config("services.$provider")) abort('404'); //handle providers that don't exist

    return Socialite::driver($provider)->redirect();
}

public function handleProviderCallback($provider = null)
{
    $social_user = Socialite::driver($provider)->user();

    $oauth_id = $social_user->getId();

    $user = User::where('oauth_id', $oauth_id)->first();

    if (!$user) {
        $user = new User();
        $user->email = $social_user->getEmail();
        if($social_user->getNickname() && strlen( $social_user->getNickname() ) > 0)
            $user->username = $social_user->getNickname();
        else
            $user->username = $social_user->getEmail();
        $user->oauth_id = $oauth_id;
        $user->oauth_type = $provider;
        $user->password = null;
        $user->confirmation_code = null;
        $user->save();

    }

    Auth::loginUsingId($user->id);

...
}

person stevetronix    schedule 15.08.2016    source источник


Ответы (1)


Забавно, но для меня это была глупая ошибка, стоившая мне драгоценного времени.

мой столбец базы данных был установлен на varchar(20)

Google getID() - это 21 in length, т.е. требует varchar(21)

поэтому последнее число всегда обрезается. Вот почему значение, возвращаемое моим запросом, всегда ложно.

Мне пришлось на всякий случай установить в столбце базы данных varchar(25), и теперь все в порядке.

Удачного кодирования ...

person The Billionaire Guy    schedule 16.11.2018