我正在使用Socialite进行Facebook注册/身份验证,当用户接受Facebook上的所有权限时,它工作得很好。 但是当用户拒绝其中一项权限时,我遇到了问题 - 尤其是我的应用程序创建帐户所需的电子邮件。如果用户错误地做了它并且仍然想使用Facebook身份验证我必须使用auth_type = rerequest发送到Facebook API请求
来自Facebook文档:
如果有人拒绝了您的应用的权限,则登录对话框不会让您的应用重新请求权限,除非您将auth_type = rerequest与您的请求一起传递。
有没有办法通过社交网站发送?
答案 0 :(得分:4)
修改强>
我刚刚找到解决方案:
向auth_type=rerequest
添加新的redirect()
参数,为了在您的控制器中创建一个方法,可以在拒绝权限后重定向用户,然后将方法with()
设置为将rerequest参数附加到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
答案 1 :(得分:0)
使用脸书时的另一个重要方面是不要假设用户将始终在Facebook注册电子邮件。
来自facebook的说明:
请注意,即使您申请电子邮件权限,也不能保证 你会得到一个电子邮件地址。例如,如果有人注册了 Facebook上有电话号码而不是电子邮件地址,电子邮件 字段可能是空的。