我正在使用Laravel 5.4
和Socialite
来允许我网站的访问者登录。
我最近获得了user_events
权限,因为我想在我的网站上添加一些功能。
在此之前,一些用户在我的数据库中注册了他们在数据库中的用户令牌。 (令牌不包括默认权限,但不包括user_events
)
我更新了SocialAuthController.php
以反映新创建的用户的新权限,这非常有效
return Socialite::driver('facebook')
->scopes(['public_profile', 'user_events'])
->redirect();
如果用户已使用其令牌在数据库中注册,则无法运行此命令$fb->get('me/events')
,因为该令牌不包含user_events
权限。
有没有办法强制用户使用新权限获取新令牌而无需将其从数据库中删除? (我有与用户相关的数据)?
public function handleProviderCallback(SocialAccountService $service)
{
$user = $service->createOrGetUser(Socialite::driver('facebook')->user());
}
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;
}