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

时间:2017-01-25 00:12:10

标签: php facebook laravel laravel-5 laravel-socialite

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

所以,我使用社交网站,这是我需要的,但是,当我第一次登录时,回调不会重定向到我指示的视图/网址,而是Laravel向我显示下一个例外:

  

SessionGuard.php第439行中的ErrorException:   传递给Illuminate \ Auth \ SessionGuard :: login()的参数1必须实现接口Illuminate \ Contracts \ Auth \ Authenticatable,null给定,在/var/www/vendor/laravel/framework/src/Illuminate/Auth/AuthManager.php中调用在第294行并定义

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

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');              
}

所以,我检查了我的数据库并且记录在那里 - 好的 ......但我没有参加会议 - 错了 ...如果我再次登录facebook(保留记录在数据库中)我成功登录并且错误消失了......好吧,但是根本没有......

如果我这样做:

dd($user)

我第一次得到 null 值 在接下来的几次里我什么都没有...... $ user var显示为空白......

所以我认为是这一行:

auth()->login($user);

我试过

\Auth::login($user);

但它也不起作用......

那么,我的项目中的任何配置都可能出错? 这个例子我在Laravel 5.3的tutoriales中看到它,所以我不明白发生了什么:(

谢谢!抱歉我的英语! :)

1 个答案:

答案 0 :(得分:1)

这样做:

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

我在现有代码中添加了$user =。因为当你执行Model::create时,它会返回Model类型的对象。