Laravel socialite $ user- ›getId ()?

Я не уверен, что это действительно вызывает мою проблему, но, возможно, кто-то узнает. Когда я использую Laravel Socialite и иду:

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

Тогда где-нибудь еще в моем коде сделайте это:

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

По какой-то безумной причине я получаю такую ​​ошибку:

Аргумент 1, переданный в Illuminate \ Auth \ SessionGuard :: login (), должен реализовывать интерфейс 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


person Magearlik    schedule 16.05.2016    source источник


Ответы (1)


Сообщение об ошибке на самом деле самоочевидно. Когда вы сделаете User::where('provider_id', $social_user->id), вы получите объект-конструктор, который реализует Illuminate\Database\Eloquent\Builder. Вы можете вызвать ->get(), чтобы получить коллекцию результатов (набор объектов, реализующих Illuminate\Contracts\Auth\Authenticatable в вашем случае, чтобы вы могли выполнять итерацию по ним), или, как вы это делали, вы можете получить первое совпадение с ->first() (один объект, реализующий Illuminate\Contracts\Auth\Authenticatable). Дополнительную информацию можно найти в документации Eloquent.

Суть в том, что пока вы не позвоните ->get() или ->first(), вы работаете с объектом-конструктором. На самом деле существует также метод ->find(), который используется для получения записи по pk, вы не можете использовать его для поиска записей по ограничениям (где), но он также возвращает объект модели.

person sevavietl    schedule 16.05.2016