У меня есть 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);
...
}