编辑:
我刚刚找到了解决方案:
向 中添加一个新auth_type=rerequest
参数redirect()
,为此在您的控制器中创建一个方法,在拒绝权限后可以重定向用户,然后设置该方法with()
以将 rerequest 参数附加到 URL,如下所示:
public function redirect(Socialite $socialite)
{
return $socialite->driver('facebook')->with(['auth_type' => 'rerequest'])->redirect();
}
另一种解决方法是社交名流暂时不提供开箱即用的请求,因此在这种情况下,您在收到社交名流用户拒绝电子邮件许可的社交名流用户响应后,从用户 Facebook 帐户取消授权您的应用程序,然后从登录页面提醒用户,他必须授予您继续并使用 Facebook 登录您的应用程序的权限,因此下次用户单击登录按钮时,他将再次看到一个 Facebook 对话框,他可以在其中授予所有权限.
/**@var \Laravel\Socialite\Two\User $retrieveUser*/
$retrieveUser = $social->driver($provider)->user();
$client = new \GuzzleHttp\Client;
$response = $client->delete("https://graph.facebook.com/{$retrieveUser->id}/permissions",
[
'headers' => [
'Accept' => 'application/json',
],
'form_params' => [
'access_token' => $retrieveUser->token
]
]
);
因为此解决方法不遵循 Facebook 最佳实践,我还建议您使用另一个具有此选项的包https://github.com/SammyK/LaravelFacebookSdk