新的facebook api里面没有之前旧版本的require_login()方法,程序里面用example里面的code有时候会出现不断循环的情况,于是乎在论坛找了一些相关资料之后重写require_login()方法.
重写自己的FacebookManager类继承自Facebook
<?php
require_once(dirname(__FILE__) . "/lib/facebook.php");
class FacebookManager extends Facebook{
public function require_login($next_url, $cancel_url = '', $req_perms = '', $optional_perms = ''){
$fbme = null;
if ($this->getSession()){
try
{
$fbme = $this->api('/me');
}
catch (FacebookApiException $ex)
{
error_log($ex, 0);
//var_dump($ex);
}
}
if (!$fbme)
{
$loginUrl = $this->getLoginUrl(array('canvas' => 1,
'fbconnect' => 0,
'req_perms' => $req_perms,
'next' => $next_url,
'cancel_url' => $cancel_url )
);
?>
<script type="text/javascript">
/* Change the location if the user is intending to play the game */
top.location = '<?php echo($loginUrl); ?>';
</script>
<a href="<?php echo($loginUrl); ?>">Please click here if you are not automatically redirected</a>
<?php
die();
}
else
{
//$fbme is valid i.e. user can access our app
}
$result_array = array();
$result_array['user_info'] = $fbme;
$result_array['ext_perms'] = array();
if ($fbme && $req_perms != '')
{
//Check if all requested extended permissions exist
//If any permission has not been given, ask for them all. Facebook permissions dialog will
//skip any that have been given
foreach ( explode(',', $req_perms) as $perm)
{
try
{
$hasAppPermission_perm_result = $this->api
(
array('method' => 'users.hasAppPermission', 'ext_perm' => $perm)
);
}
catch (Exception $ex)
{
error_log($ex, 0);
//var_dump($ex);
}
if ($hasAppPermission_perm_result !== "1")
{
$loginUrl = $this->getLoginUrl(array('canvas' => 1,
'fbconnect' => 0,
'req_perms' => $req_perms,
'next' => $next_url,
'cancel_url' => $cancel_url )
);
?>
<script type="text/javascript">
/* Change the location if the user is intending to play the game */
top.location = '<?php echo($loginUrl); ?>';
</script>
<a href="<?php echo($loginUrl); ?>">Please click here if you are not automatically redirected</a>
<?php
die();
}
else
{
$result_array['ext_perms'][$perm] = true;
}
unset($hasAppPermission_perm_result);
}
foreach ( explode(',', $optional_perms) as $perm)
{
try
{
$hasAppPermission_perm_result = $this->api
(
array('method' => 'users.hasAppPermission', 'ext_perm' => $perm)
);
}
catch (Exception $ex)
{
error_log($ex, 0);
//var_dump($ex);
}
if ($hasAppPermission_perm_result == "1")
{
$result_array['ext_perms'][$perm] = true;
}
unset($hasAppPermission_perm_result);
}
}
// foreach (explode(',', $req_perms) as $perm)
// {
// $result_array['ext_perms'][$perm] = true;
// }
$result_array['access_token'] = $this->getAccessToken();
return($result_array);
}
}
在自己的index页面的示例代码:
<?php
define('APP_ID', 'xxxx');
define('API_KEY', 'xxxx');
define('SECRET', 'xxxx');
require_once("FacebookManager.php");
$facebook = new FacebookManager(array(
'appId' => APP_ID,
'secret' => SECRET,
'cookie' => true
));
$user = $facebook->require_login("http://apps.facebook.com/atlantissocial/","","email,publish_stream,user_birthday"); //permission
$session = $facebook->getSession(); //$session里面有access_token
$facebook_id = $facebook->getUser();
分享到:
相关推荐
Laravel sql_require_primary_key解决方法 创建此软件包是为了解决将Laravel的架构构建器与用于实施主键MySQL服务器(例如DigitalOcean托管数据库)一起使用时的问题。 问题 发生此问题的原因是,MySQL中的sql_...
rubocop_require_relative 该宝石扩展了rubocop以捕获require_relative。 安装 将此行添加到您的应用程序的Gemfile中: gem 'rubocop_require_relative' 然后执行: $ bundle 用法 在.rubocop.yml中,添加以下...
RequirePathFixer 旧版...require_once __DIR__ . '/path/to/file.php' ;require_once dirname (__FILE__). '/path/to/file.php' ;require_once ( '../app_root/path/to/file.php' );require_once ( 'path/' . 'to/'
require_once("db_msql.inc"); require_once("db_mssql.inc"); require_once("db_mysql.inc"); require_once("db_oci8.inc"); require_once("db_odbc.inc"); require_once("db_oracle.inc"); require_once("db_pgsql...
include_once和require_once的作用差不多,就是在包含的时候检查被包含的文件是不是已经包含过,如果包含过,那就不执行,否则再包含.我先说这个的原因是因为如果把include,require弄清楚了.那这点就没问题. 现在来说...
相信大家在使用PHP时经常看到include a.php、include_once a.php、require a.php或者require_once a.php类似这样的写法吧? 我们一起来学习和总结一下这几个语句的作用及特点! include 使用方法: include "test...
include() 、require()语句包含并运行指定文件。这两结构在包含文件上完全一样,唯一的区别是对于错误的处理。require()语句在遇到包含文件不存在,或是出错的时候,就停止即行,并报错。include()则继续即行。
主要介绍了函数中使用require_once问题深入探讨,优雅的配置文件定义方法推荐,最终用一个静态类来定义配置文件获胜,完美解决函数中使用require_once的问题,需要的朋友可以参考下
主要为大家介绍了WordPress提示require_once() Failed opening required的解决方法,分析了问题的原因与具体的解决技巧,具有一定参考借鉴价值,需要的朋友可以参考下
①作用及用法 可以减少代码的重复 include(_once)(”文件的路径”)与require(_once)(”文件的路径”) ②理解 说白了,就是用包含进来的文件中的内容 代替 include(_once),require(_once)那一行 ③注意 include/...
require()和include()有许多相似之处,也有些不同。理解它们的不同点非常重要,否则很容易犯错误。 我把这两个语句放在一起介绍,读者可以比较学习。 1.require()语句 require()语句用于指定的文件代替语句本身,...
1.require()语句 require()语句用于指定的文件代替语句本身,就象C语言中的include()语句一样。如果php配置文件php.ini中的URL fopen wrappers 是打开的(默认情况下是打开的),就可以使用URL来指定文件的位置从而...
安装好PHPmyAdmin后,在IE里访问时会出现下面的这种错误: Warning: require_once(./libraries/common.inc.php) [function.require-once]: failed to open stream: No such file or directory in X:...
找到 require_once(R_P . 'require/bbscode.php'); 这一行,然后在此行下面添加一行 require_once(R_P.'require/loadimg.php'); 3、编辑postreply.php 找到 require_once(R_P.'require/bbscode.php'); ...
include() 、require()语句包含并运行指定文件。这两结构在包含文件上完全一样,唯一的区别是对于错误的处理。require()语句在遇到包含文件不存在,或是出错的时候,就停止即行,并报错。include()则继续即行。
本篇文章是对require与require_once与include以及include_once的区别进行了详细的分析介绍,需要的朋友参考下
NULL 博文链接:https://cuckoosnest.iteye.com/blog/474843