Laravel socialite $user->getId()?

Laravel socialite $user->getId()?

我不确定这是否是导致我出现问题的真正原因,但也许有人会知道。当我使用 Laravel Socialite 然后去:

$social_user = Socialite::driver($provider)->user();

然后在我的代码中的其他地方执行此操作:

if ($authUser = User::where('provider_id', $social_user->id)) 
        return $authUser;

出于某些疯狂的原因,我收到了这样的错误:

传递给 Illuminate\Auth\SessionGuard::login() 的参数 1 必须实现接口 Illuminate\Contracts\Auth\Authenticatable,给定 Illuminate\Database\Eloquent\Builder 的实例

但是,如果我这样做,我不会收到错误消息:

if($authUser = User::where('email', $social_user->email)->first())
        return $authUser;

我这样登录这个用户:

Auth::login($authUser, true);

有谁知道为什么?我正在使用 laravel 5.2

错误消息实际上是自我解释的。当您执行 User::where('provider_id', $social_user->id) 时,您最终会得到实现 Illuminate\Database\Eloquent\Builder 构建器对象 。您可以对其调用 ->get() 以获得 结果集合 (在您的情况下实现 Illuminate\Contracts\Auth\Authenticatable 的对象集合,因此您可以迭代它们),或者像您一样,您可以获得 第一次匹配 ->first()(一个实现 Illuminate\Contracts\Auth\Authenticatable 的对象)。您可以在 Eloquent documentation.

中阅读更多内容

要点是 直到您调用 ->get()->first() 您正在使用 builder 对象 .其实还有->find()方法,用来通过pk检索记录,你不能用它来通过约束(where)搜索记录,但它也是returns模型对象。