Laravel Socialite - Facebook扩展/替换具有更多权限的令牌

时间:2017-07-26 02:59:31

标签: facebook-graph-api laravel-socialite

我正在使用Laravel 5.4Socialite来允许我网站的访问者登录。

场合

我最近获得了user_events权限,因为我想在我的网站上添加一些功能。

在此之前,一些用户在我的数据库中注册了他们在数据库中的用户令牌。 (令牌不包括默认权限,但不包括user_events

我更新了SocialAuthController.php以反映新创建的用户的新权限,这非常有效

return Socialite::driver('facebook') ->scopes(['public_profile', 'user_events']) ->redirect();

问题

如果用户已使用其令牌在数据库中注册,则无法运行此命令$fb->get('me/events'),因为该令牌不包含user_events权限。

问题

有没有办法强制用户使用新权限获取新令牌而无需将其从数据库中删除? (我有与用户相关的数据)?

SocialAuthController

public function handleProviderCallback(SocialAccountService $service)
{
   $user = $service->createOrGetUser(Socialite::driver('facebook')->user());
}

SocialeAccountService

public function createOrGetUser(ProviderUser $providerUser)
{
        $account = SocialAccount::whereProvider('facebook')
            ->whereProviderUserId($providerUser->getId())
            ->first();

        if ($account) {
            return $account->user;
        } else {

            $account = new SocialAccount([
                'provider_user_id' => $providerUser->getId(),
                'provider' => 'facebook',
                'nickname' => $providerUser->getNickname(),
                'avatar' => $providerUser->avatar_original,
                'token' => $providerUser->token,
            ]);

            $user = User::whereEmail($providerUser->getEmail())->first();

            if (!$user) {

                $user = User::create([
                    'email' => $providerUser->getEmail(),
                    'name' => $providerUser->getName(),

                ]);
              }
          $account->user()->associate($user);
          $account->save();

          return $user;
}

0 个答案:

没有答案