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
.
我有一个 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
.