SessionGuard.php 中的 ErrorException Laravel 5.3 中 Socialite(Facebook 作为提供者)

ErrorException in SessionGuard.php in Laravel 5.3 with Socialite (Facebook as provider)

我有一个 Laravel 项目 (v5.3),它需要使用自定义表单和 facebook 连接登录。

所以,我使用 Socialite,这是我需要的,但是,当我第一次登录时,回调不会重定向到我指定的 view/url,而是 Laravel 显示下一个异常:

ErrorException in SessionGuard.php line 439: Argument 1 passed to Illuminate\Auth\SessionGuard::login() must implement interface Illuminate\Contracts\Auth\Authenticatable, null given, called in /var/www/vendor/laravel/framework/src/Illuminate/Auth/AuthManager.php on line 294 and defined

这是我的自定义控制器中的代码:

public function handleProviderCallback()
{
    try
    {
        $socialUser = Socialite::driver('facebook')->user();

    }catch(\Exception $e)
    {
        return redirect('/');
    }
        $user = User::where('facebook_id', $socialUser->getId())->first();

        if(!$user)
            User::create([
                'facebook_id' => $socialUser->getId(),
                'name' => $socialUser->getName(),
                'email' => $socialUser->getEmail(),
            ]);

            auth()->login($user);
            return redirect()->to('/home');              
}

所以,我检查了我的数据库,记录就在那里 - 好的 ...但我不在 session - 错误 ...如果我再次使用 facebook 登录(将记录保存在数据库中),我会成功登录并且错误消失...好的,但根本...

如果我这样做:

dd($user)

我第一次得到一个 null 值 在接下来的时间里,我什么也没得到...$user var 显示为空白...

所以我认为是这一行:

auth()->login($user);

我试过了

\Auth::login($user);

但还是不行...

那么,我的项目中的配置有什么问题吗? 这个例子是我在 Laravel 5.3 的教程中看到的,所以我不明白发生了什么:(

谢谢!对不起我的英语! :)

这样做:

if(!$user)
        $user = User::create([
            'facebook_id' => $socialUser->getId(),
            'name' => $socialUser->getName(),
            'email' => $socialUser->getEmail(),
        ]);

我已将 $user = 添加到您现有的代码中。因为当你做 Model::create 它 returns 类型的对象 Model.