4

これが本当に私の問題を引き起こしているのかどうかはわかりませんが、おそらく誰かが知っているでしょう. 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を使用しています

4

1 に答える 1

3

エラーメッセージは実際には自明です。そうすると、 を実装User::where('provider_id', $social_user->id)するビルダーオブジェクトIlluminate\Database\Eloquent\Builderになります。->get()それを呼び出して結果のコレクション (ケースで実装するオブジェクトのコレクションなので、それらを反復処理できます) を取得したり、 (を実装する 1 つのオブジェクト) との最初の一致Illuminate\Contracts\Auth\Authenticatable取得したりできます。詳細については、Eloquent のドキュメントを参照してください。->first()Illuminate\Contracts\Auth\Authenticatable

主なポイントは、ビルダーオブジェクトを呼び出す ->get()か、操作するまでです。実際には、 によってレコードを取得するために使用されるメソッドもあります。制約 (where) によってレコードを検索するために使用することはできませんが、モデル オブジェクトも返します。->first()->find()pk

于 2016-05-16T05:53:47.617 に答える