FacebookAPI:获取用户对电子邮件的权限并避免取消循环

FacebookAPI:获取用户对电子邮件的权限并避免取消循环,facebook,zend-framework,Facebook,Zend Framework,我正在开发一个facebook应用程序。我正在为一个网页提供服务,该网页将成为facebook粉丝页面中的iFrame。问题是,当用户单击cabncel(不允许)按钮(它循环)时,我无法处理这种情况 谁能给我一个简单的例子,如何处理许可申请?假设我只需要访问用户电子邮件,当用户点击“取消”时,我想重定向到页面墙,因此不会循环 这是来自控制器的一些代码 $this->facebook = Zend_Registry::get('facebook'); $signed_request = $t

我正在开发一个facebook应用程序。我正在为一个网页提供服务,该网页将成为facebook粉丝页面中的iFrame。问题是,当用户单击cabncel(不允许)按钮(它循环)时,我无法处理这种情况

谁能给我一个简单的例子,如何处理许可申请?假设我只需要访问用户电子邮件,当用户点击“取消”时,我想重定向到页面墙,因此不会循环

这是来自控制器的一些代码

$this->facebook = Zend_Registry::get('facebook');
$signed_request = $this->facebook->getSignedRequest();
$this->view->hasAllowed = isset($signed_request['oauth_token']) ? true : false;
从这个角度来看:

<?php if(!$this->hasAllowed): ?>
<script type="text/javascript">
   top.location.href = '<?= $this->oauth_url ?>';
</script>
<?php endif;?>
<div id="fb-root"></div>
<script type="text/javascript" src="http://connect.facebook.net/en_US/all.js"></script>
<script type="text/javascript">
    FB.init({
      appId  : '<?=$this->app_id?>',
      status : true, // check login status
      cookie : true, // enable cookies to allow the server to access the session
      xfbml  : true  // parse XFBML
    });
</script>

top.location.href='';
FB.init({
appId:“”,
状态:true,//检查登录状态
cookie:true,//启用cookie以允许服务器访问会话
xfbml:true//解析xfbml
});
来自:

如果用户按“不允许”,则表示您的应用未经授权。OAuth对话框将(通过HTTP 302)用户浏览器重定向到您在redirect_uri参数中传递的URL,其中包含以下错误信息:error=access_denied&error_description=The+user+denied+your+请求

因此,您当前的问题是,如果用户单击“不允许”,您将显示包含相同JS登录代码的相同视图,并重新启动该过程。您需要做的只是检查回调操作中的
错误原因
参数,如果存在并设置为
用户拒绝
,则重定向到应用程序墙页面:

public function callbackAction()
{
    if ($this->_hasParam('error_reason') && $this->_getParam('error_reason') == 'user_denied') {
        $this->_helper->Redirector->setGotoUrl('http://example.com/yourapppage');
    }
}

或者,你可以呈现一个不同的视图,向用户解释为什么你的应用程序需要权限,并给他们再次登录的选项。

我看不出你的
$this->oauth\u url是什么,但它必须是这样的:

top.location.href="http://www.facebook.com/connect/uiserver.php?app_id=APP_ID&method=permissions.request&display=page&next=URL_TO_GO_WHEN_USER_ACCEPT&cancel_url=URL_TO_GO_WHEN_USER_CANCEL&response_type=token&canvas=1&perms=email";
可能,您需要的是
cancel\u url
参数,如果用户不允许,它会将用户重定向到此url

希望有帮助