当前位置: 首页 > 知识库问答 >
问题:

使用Socialite在laravel中对null调用成员函数create()

狄德泽
2023-03-14

当我尝试使用facebook对用户进行身份验证时,我可以将数据存储到用户表中,但无法将数据创建到soical_帐户中。因此,在出现错误后,会出现“调用成员函数创建()on null”。谁能给我一个解决方案,说明我错在哪里。

在我的社会账户控制中,我有以下方法

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

}

社交账户模型

名称空间应用程序;

使用Illumb\Database\Elount\Model;

######################################################################################################

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

}

共有1个答案

郭皓
2023-03-14

您没有在此处返回任何内容,请更改:

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

public function accounts()
{
   return $this->hasMany('App\SocialAccount');
}
 类似资料:
  • 我有5个类别Categoria、Produto、Subcategoria、submoduto和Comanda,对于所有类别中的执行搜索,我尝试提供如下服务: 我尝试访问ComandaController上的服务 然后symfony返回错误 我services.yml有 怎么了?

  • 我想基本验证,如果用户是管理员,然后请求下一步,否则重定向到主页 User.php: 最后一个函数是 一个dmin.php(这是中间件): routes.php: 我得到以下错误: Admin.php第21行中的FatalErrorException: 调用null上的成员函数isAdmin() 我还添加了

  • 函数attach()有问题。我已经创建了3个表。1表用于添加电影。表2适用于电影类别。3表是电影ID和类别ID的集合。多对多的组合。 当我想添加一个新的视频类别从表格这我有错误- 视频控制器。php- 视频php模型 类别php模型 User.php模型(也许你需要一个User.php模型解决问题) 迁移-创建\u类别\u视频\u表。php 迁移-创建类别表。php 移民-create_video

  • 我试图为我在Github上的一个项目创建一个新的虚拟开发环境。我已经安装了MariaDB,PHP 7,做了一个本地克隆的存储库,并恢复了它的. env文件。它应该起作用了。 不幸的是,当我键入php artisan和作曲家更新,我收到以下错误: PHP致命错误:未捕获错误:调用成员函数连接()在src/供应商/laravel/框架/src/照明/数据库/雄辩/Model.php:1058 堆栈跟踪

  • 我有一个密码: 我正在尝试使用toSql()将laravel查询转换为mysql 但我犯了一个错误,比如 对整数调用成员函数toSql() 然后我尝试了 但它返回的输出为'false',我无法得到预期的输出。我不知道为什么会发生这种情况。任何帮助都将不胜感激。 预期产出:

  • 问题内容: 我正在尝试检查注册中是否已使用电子邮件。当我在学校工作时,它运行良好,但现在突然显示出一个错误: 致命错误:在null上调用成员函数prepare() 我用这个包括 在这里 问题答案: 编辑:( 我想通了)。 我终于弄清楚了为什么您的代码无法正常工作,而我原来的答案已不再适用,我已将其剔除掉。 连接不起作用的原因是因为您从连接参数中省略了常量。 即使您可能没有设置密码,也仍然需要将其作