编辑:
我只是找到了解决办法:
新auth_type=rerequest
参数添加到redirect()
,这样做你的控制器中创建用户可以在其中下降许可后重定向的方法,然后设置方法with()
到再请求参数附加到URL像这样:
public function redirect(Socialite $socialite)
{
return $socialite->driver('facebook')->with(['auth_type' => 'rerequest'])->redirect();
}
作为Socialite的另一个解决方法暂时不提供ReRequest,因此在这种情况下,您在收到用户拒绝电子邮件的Socialite用户响应后,从用户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
偶然的巧合,我现在面临同样的问题,我找不到任何方法来发送尚未使用Laravel社会名流一个再请求,比如我决定创建手动另一个类处理这种情况时,我没有收到来自用户的电子邮件,我尝试的另一个解决方法是,当用户拒绝了电子邮件我手动发送另一个删除调用图形Api从用户设置撤销应用程序,这将不会登录用户在我的应用程序和下一次用户点击登录按钮时,他会再次提示分享他的电子邮件地址。 –