我正在开发一个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>
答案 0 :(得分:2)
来自the docs:
如果用户按下“不允许”,则表示您的应用未获得授权。 OAuth对话框将(通过HTTP 302)用户的浏览器重定向到您在redirect_uri参数中传递的URL,并显示以下错误信息:http://YOUR_URL?error_reason=user_denied& error = access_denied&amp; error_description = +用户+拒绝+您的+请求。< / p>
因此,您当前的问题是,如果用户单击“不允许”,您将显示包含相同JS登录代码的相同视图,然后重新启动该过程。您需要做的就是检查error_reason
参数的回调操作,如果存在并设置为user_denied
,请改为重定向到应用墙页:
public function callbackAction()
{
if ($this->_hasParam('error_reason') && $this->_getParam('error_reason') == 'user_denied') {
$this->_helper->Redirector->setGotoUrl('http://example.com/yourapppage');
}
}
或者,您可以呈现一个不同的视图,向用户解释您的应用为何需要其权限,并为他们提供再次登录的选项。
答案 1 :(得分:0)
我看不出你的$this->oauth_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_url
参数,如果他不允许,会将用户重定向到此网址。
希望它有所帮助!