Laravel socialite $ user-> getId()?

时间:2016-05-16 05:41:55

标签: laravel laravel-5.2 laravel-socialite

我不确定这是否真的导致了我的问题,但也许有人会知道。当我使用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

1 个答案:

答案 0 :(得分:1)

错误消息实际上是自我解释的。当您执行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(),您正在使用构建器对象。实际上还有->find()方法,用于通过pk检索记录,你不能用它来通过约束(在哪里)搜索记录,但它也返回模型对象。