我不确定这是否是真正导致我的问题的原因,但也许有人会知道。当我使用 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
在你的情况下,这样你就可以迭代它们),或者像你一样,你可以获得第一场比赛 with ->first()
(一个实现的对象Illuminate\Contracts\Auth\Authenticatable
)。您可以阅读更多内容雄辩的文档 https://laravel.com/docs/5.2/eloquent.
要点是直到你打电话 ->get()
or ->first()
你正在与构建器对象。实际上有->find()
方法也用于检索记录pk
,您不能使用它通过约束(where)搜索记录,但它也会返回模型对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)