我安装了 Laravel 5.2 和最新版本的 Socialite,可以正常使用 Twitter 和 Facebook 登录,但不能使用 Google 登录。
使用 Google,用户可以在第一时间登录并插入数据库。但是,当用户在注销后重新尝试登录时,就会出现问题。在我的回调函数中,getId() 调用返回一个数字,例如 1048710206853583#####。然而,在 MySQL 数据库中,在用户首次登录后,一个数字如 92233720368547##### 被存储在 provider_id 字段中。这发生在我正在使用的一个 getId() 调用中。看来 Google 正在返回两个不同的 ID。这可能吗?我可能做错了什么?
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);
...
}
最佳答案
这很有趣,但对我来说这是一个愚蠢的错误,浪费了我宝贵的时间。
我的数据库列设置为 varchar(20)
google getID()
的长度是 21
即需要 varchar(21)
所以最后一个数字总是被截断。这就是为什么我的查询返回的值总是错误的。
我不得不将我的数据库列设置为 varchar(25)
以防万一,现在一切都很好。
快乐编码...
关于Laravel Socialite 与 Google 保存不同的 ID 号,导致重复错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38961534/