2016-05-16 56 views
2

我不确定这是否是真正导致我的问题,但也许有人会知道。当我使用Laravel社会名流和去:

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

然后在其他地方在我的代码是这样:

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

对于一些疯狂的原因,我得到这样一个错误:通过

参数1以照亮\ Auth \ SessionGuard :: login()必须实现接口Illuminate \ Contracts \ Auth \ Authenticatable,实例Illuminate \ Database \ Eloquent \ Builder给出

但是,如果我d O此我没有得到一个错误:

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

我喜欢这个登录该用户:

Auth::login($authUser, true); 

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

回答

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检索记录,您不能使用它通过约束(where)来搜索记录,但它也会返回模型对象。

+0

谢谢。 :)解决了它。 – Magearlik

相关问题