gpt4 book ai didi

php - 使用 Socialite 在 laravel 中的 null 上调用成员函数 create()

转载 作者:行者123 更新时间:2023-12-05 01:41:32 24 4
gpt4 key购买 nike

当我尝试使用 facebook 对用户进行身份验证时,我可以将数据存储到用户表中,但无法将数据创建到 soical_accounts 中。因此,在出现“调用成员函数 create()”错误之后为空”。任何人都可以为我提供我错在哪里的解决方案。

在我的 SocialAccountControll 中,我有以下方法

 public function handleProviderCallback($provider)
{
try{

$user = Socialite::driver($provider)->user();
} catch (Exception $e) {
return redirect('/login');
}

$authUser = $this->findOrCreateUser($user, $provider);

Auth::login($authUser, true);

// redirectTo, so that way we use the same redirect location that the rest of our authentication uses.
//This is a normal protected function that you can add in your users table to redirect a user wherever
// you want to set that redirect to.
//return redirect($this->redirectTo);

return redirect('/home');
}

public function findOrCreateUser($socialUser, $provider)
{

$account = SocialAccount::where('provider_name', $provider)->where('provider_id',$socialUser->getId())->first();

if($account)
{
return $account->user;
}
else
{
$user = User::where('email', $socialUser->getEmail())->first();
if(! $user)
{
$user = User::create([
'email' => $socialUser->getEmail(),
'name' => $socialUser ->getName()
]);
}

$user->accounts()->create([
'provider_name' => $provider,
'provider_id' => $socialUser->getId()
]);

return $user;
}


}

在我的数据库迁移中,我有用户和 social_accounts,用户与 social_accounts 有一对多的关系。

用户表:

public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->nullable();
$table->timestamp('email_verified_at')->nullable();
$table->string('password')->nullable();
$table->rememberToken();
$table->timestamps();
});
}

Social_accounts 表:

public function up()
{
Schema::create('social_accounts', function (Blueprint $table) {
$table->increments('id');
$table->bigInteger('user_id');
$table->string('provider_name')->nullable();
$table->string('provider_id')->unique()->nullable();
$table->timestamps();
});
}

用户模型类用户扩展可验证{ 使用可通知的;

/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];

/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];

public function accounts()
{
$this->hasMany('App\SocialAccount');
}

社交账户模型

命名空间应用;

使用 Illuminate\Database\Eloquent\Model;

类 SocialAccount 扩展模型{ protected $fillable = [ '供应商名称','供应商ID' ];

  public function user() {
return $this->belongsTo('App\User');
}

最佳答案

你在这里没有返回任何东西所以改变:

public function accounts()
{
$this->hasMany('App\SocialAccount');
}

public function accounts()
{
return $this->hasMany('App\SocialAccount');
}

关于php - 使用 Socialite 在 laravel 中的 null 上调用成员函数 create(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54266329/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com