我们正在开发一个带有PHP SDK 3.2.3和Javascript SDK的Facebook应用程序。如果他们拒绝在登录时访问Facebook上发布,我需要重新要求用户在他们的墙上发布。
正如documentation所说:
[...]您的应用必须通过特殊处理重新询问拒绝的权限。 [...]
[...] Web应用必须明确地将新选项传递给Login Dialog:auth_type:rerequest。有关新选项如何在Web上运行的详细信息,请参阅我们关于在Web上使用JavaScript SDK的文档。
但我们尝试了这个请求:
但是用户会直接在MY_PAGE网址上重定向,并且不会重新请求权限。
这种(错误的)行为可能是由于应用程序是测试应用程序的事实?
答案 0 :(得分:4)
在js sdk上,我直接调用这样的登录方法:
FB.login( function( response ) {
if (response.status == 'connected') {
}
},{
scope: 'email,public_profile',
return_scopes: true,
auth_type: 'rerequest'
});
在服务器端,我使用accesstoken在Facebook上请求用户详细信息。如果未提供电子邮件,则返回错误,告知用户他需要再次登录并提供电子邮件。当他们再次点击登录按钮时,由于 auth_type:' rerequest' 部分,他们将再次请求权限。
答案 1 :(得分:0)
假设用户拒绝了电子邮件许可,使用FacebookSDK和laravel,其中$ fb是FacebookSDK的实例,您可以:
return redirect()->to($fb->getReRequestUrl(['email']));
没有FacebookSDK:
return redirect('https://www.facebook.com/v2.10/dialog/oauth?' . build_query([
'client_id' => config('services.facebook.client_id'),
'redirect_uri' => 'http://localhost:8000/social_auth/facebook/callback',
'state' => $state,
'auth_type' => 'rerequest',
'scope' => 'email'
]));
答案 2 :(得分:-1)
在php SDK(3.x)中,auth_type rerequest可以通过getLoginUrl参数发送到Facebook:
$loginUrl = $facebook->getLoginUrl(array(
'scope' => 'public_profile, user_friends, email',
'redirect_url' => 'http://www.yourul.com/example.php',
'auth_type' => 'rerequest',
));