文档显示:“URL -(可选)登录/授权过程完成后将用户重定向到的URL。无论登录成功还是失败,用户都将被重定向到该URL,因此您必须按照身份验证文档中的描述检查URL中的错误参数。如果未指定此属性,则用户将重定向到当前redirect_uri(即调用此方法的页面的URL,通常是用户浏览器中的当前URL )。”因此,如果用户拒绝身份验证/权限,但指向相应文档的链接不再存在,则有一种方法可以捕获(https://developers.facebook.com/docs/authentication/)。
为了简单起见,redirect_uri与起始php文件的地址相同,并且php代码非常简单:
require 'facebook.php';
$facebook = new Facebook(array(
'appId' => 'X',
'secret' => 'Y',
));
$user = $facebook->getUser();
if ($user) {
try {
$user_profile = $facebook->api('/me');
} catch (FacebookApiException $e) {
error_log($e);
$user = null;
}
}
if (!$user) {
$params = array(
'scope' => 'read_stream, friends_likes',
'redirect_uri' => 'http://myapp.com/app'
);
$loginUrl = $facebook->getLoginUrl($params);
}有人知道如何捕捉这些信息吗?
发布于 2013-02-08 19:23:45
您可以执行以下操作来检查权限:
$permissions = $facebook->api("/me/permissions");
if( array_key_exists('publish_stream', $permissions['data'][0]) ) {
// Permission is granted!
// Do the related task
$post_id = $facebook->api('/me/feed', 'post', array('message'=>'Hello World!'));
} else {
// We don't have the permission
// Alert the user or ask for the permission!
header( "Location: " . $facebook->getLoginUrl(array("scope" => "publish_stream")) );
}发布于 2015-10-07 07:55:07
应该注意的是,在最新的PHP facebook SDK中,没有->api方法。使用此检查(有时)来获取权限似乎也存在问题。当使用较旧的软件开发工具包时,有时(看起来是随机的)一些用户会得到"OAuthException:(#412)用户尚未安装应用程序“,即使在FB访问令牌调试器上的检查显示适当的权限。当我更新到新的SDK,并想出了获取简单权限数据列表的新方法后,一切又都正常了。
我花了很多时间在FB网站上找到这个解决方案,所以我把它贴在这里,希望能为其他人节省几个小时。他们现实生活中的救星是我发现了getDecodedBody方法(在FB文档中很难找到)。我的示例只检查publish_actions。
$fb = new Facebook\Facebook([
'app_id' => your_app_id,
'app_secret' => your_secret,
'default_graph_version' => 'v2.2',
]);
$badperms=true; //start by assume bad permissions
try {
$response = $fb->get('/me/permissions', $at);
$perms = $response->getDecodedBody();
if($badperms){
foreach($perms['data'] AS $perm){
if($perm['permission']=='publish_actions' && $perm['status']=='granted') $badperms=false;
}
}
} catch(Facebook\Exceptions\FacebookResponseException $e) {
log("MSG-received facebook Response exception!! ".$e->getMessage());
} catch(Facebook\Exceptions\FacebookSDKException $e) {
log("MSG-received facebook SDK exception!! ".$e->getMessage());
}
if($badperms) {
//do something like reflow auth
}发布于 2015-12-22 21:13:42
我刚刚遇到了同样的问题,我不知道如何处理取消操作(在facebook php api和google oauth2中)。
解决方案比预期的要简单得多。
如果权限不被接受(根本不接受),响应中至少会有一个参数/变量: URL中的error。
在facebook中,这种回应看起来是这样的:
error=access_denied&error_code=200&error_description=Permissions+error&error_reason=user_denied
对于google,你只能得到
error=access_denied
但这应该足够了。
我只是检查是否设置了错误,如果设置了,我会将响应重定向到我的登录页面。
我希望它能帮助一些人,因为它真的没有记录这一步。顺便说一下: facebook API的版本: google API的v5版本oAuth2: 2.0 (我认为- google文档在查找最新版本时真的是一团糟)
https://stackoverflow.com/questions/14771185
复制相似问题