Laravel 5.4 - 创建用户

时间:2017-02-11 13:36:20

标签: php laravel laravel-5.4

我正在将Facebook登录集成到我的网络应用程序中,但是我收到了这个错误:

  

SessionGuard.php第407行中的ErrorException:参数1传递给   Illuminate \ Auth \ SessionGuard :: login()必须实现接口   Illuminate \ Contracts \ Auth \ Authenticatable,给定的字符串,调用   /Applications/XAMPP/xamppfiles/htdocs/shop/vendor/laravel/framework/src/Illuminate/Auth/AuthManager.php   在第294行并定义

我看到问题出在我创建新用户的时候:

public function findOrCreateUser($user, $provider)
{
    $authUser = User::where('provider_id', $user->id)->first();
    // if user exist login
    if ($authUser) {
        return $authUser;
    }

    // if user don't exist - Create new user
    $test = DB::table('users')->insert([
              'name'     => $user->name,
              'email'    => $user->email,
              'provider' => $provider,
              'provider_id' => $user->id
            ]);

    return 'Hello'; // just try if it work!
}

用户已正确创建但我收到上述错误。我看不到我的消息“你好”。如果我替换这样的create方法:

return User::create([
      'name'     => $user->name,
      'email'    => $user->email,
      'provider' => $provider,
      'provider_id' => $user->id
]);

效果很好。但我不想在创建用户后停止;我想回到另一个观点。

2 个答案:

答案 0 :(得分:1)

有几种方法可以在laravel中将新行插入表中。

一种方法是

User::create([
      'name'     => $user->name,
      'email'    => $user->email,
      'provider' => $provider,
       'provider_id' => $user->id
 ]);
return view('your_view');

但是你需要在模型中使用它(用于质量分配)

protected $fillable = ['name','email','provider','provider_id'];

下一步插入新行的其他方法

$user_database = new User;
$user_database->name = $user->name;
$user_database->email = $user->email;
$user_database->provider = $provider;
$user_database->provider_id = $user->id;
$user_database->save();
return view('your_view');

希望它对你有所帮助。有关更多其他帮助,请查看official documentation

答案 1 :(得分:0)

我不认为此行导致问题$test = DB::table('users')->inse...签入条件

if ($authUser) {
    dd('here comes the boom.....');
    return $authUser;
}

另请注意$authUserUser类型对象,其中$testboolean