我正在使用SammyK's laravel Facebook SDK PHP,我注意到auth_type=rerequest
无效。当用户拒绝其中一个权限时,就会发生这种情况。假设我有'default_scope' => ['email', 'user_status', 'user_website']
,当用户在权限响应中取消勾选电子邮件时,该电子邮件的状态将为“已拒绝”。
"permission" => "email"
"status" => "declined"
但如Facebook docs所述:
可以让某人一次授予他们拒绝的应用权限。你应该有一个教育屏幕,说明为什么你认为他们应该给你许可,然后重新询问。但是,如果您像以前一样调用登录对话框,它将不会要求该权限。
这是因为一旦有人拒绝了权限,登录对话框就不会重新询问它们,除非您明确告诉对话框您要求拒绝许可。
您可以通过将auth_type = rerequest参数添加到“登录对话框URL”来执行此操作:
所以在SammyK的服务中这样做:
$fb = App::make('SammyK\LaravelFacebookSdk\LaravelFacebookSdk');
$loginFacebook = $fb->getReRequestUrl([]); // leave it to blank to get default scope from config
有了这个,我的登录网址现在看起来像这样:
https://www.facebook.com/v2.5/dialog/oauth?auth_type=rerequest&client_id={client_id}&state={state}&response_type=code&sdk=php-sdk-5.0.0&redirect_uri=http%3A%2F%2Fexample.local%2Fdater%2Flogin%2Fcallback&scope=email%2Cuser_status%2Cuser_website
请注意我已传递auth_type=rerequest
的网址。 (不要介意其他参数,例如client_id和state,我只是在这里更改它以使其更短)。
当我取消电子邮件时,它不应该重定向回权限页面吗?因为目前,它仍然接受它,这使得电子邮件范围被拒绝并且应用程序被接受。