我有一个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中看到它,所以我不明白发生了什么:(
谢谢!抱歉我的英语! :)
答案 0 :(得分:1)
这样做:
if(!$user)
$user = User::create([
'facebook_id' => $socialUser->getId(),
'name' => $socialUser->getName(),
'email' => $socialUser->getEmail(),
]);
我在现有代码中添加了$user =
。因为当你执行Model::create
时,它会返回Model
类型的对象。