Laravel Socialite 与 Google 保存不同的 ID 号,导致重复错误

标签 laravel laravel-5 laravel-5.2 laravel-socialite

我安装了 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/

相关文章:

javascript - 在每个 foreach 上显示倒计时器

php - 如何在 Wordpress 主题中调用 laravel 函数

php - Laravel NeoEloquent 忽略 "CONSTRAINT"on::create 命令

php - Laravel 不使用 Eloquent 更新项目

php - 在 Laravel 中检查 session 超时

php - Docker 容器中响应时间缓慢 : Laravel 5. 2

php - laravel 5.6 主机到共享主机上的 cpanel

laravel - 如果我使用interventionimage缓存,缓存的文件在哪里保存?

php - 自动注入(inject)的 Laravel 模型没有属性

php - 数据插入前数据库数据字段检查