新的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();
分享到:
相关推荐
然而,`require_once` 的行为与 `require` 类似,但有一个关键的不同之处:它会检查目标文件是否已经被引入过。如果已经引入过,`require_once` 就不会再次引入,从而避免了重复执行相同代码的问题。这在处理类定义...
Laravel sql_require_primary_key解决方法 创建此软件包是为了解决将Laravel的架构构建器与用于实施主键MySQL服务器(例如DigitalOcean托管数据库)一起使用时的问题。 问题 发生此问题的原因是,MySQL中的sql_...
例如,我们可以创建一个名为`require_login`的装饰器,用于确保只有已登录的用户才能执行某些操作: ```python def require_login(func): def wrapper(*args, **kwargs): if not is_logged_in(): # 假设is_logged...
通常,对于那些对程序运行必不可少的文件(如配置文件),应使用`require`或`require_once`,以确保文件总是被加载,并在文件缺失时立即停止程序以避免进一步的错误。而对于那些可选的或条件性的文件包含,可以使用`...
在PHPMyAdmin的安装过程中,有时会遇到一个常见的错误提示:“Warning: require_once(./libraries/common.inc.php) [function.require-once]: failed to open stream: No such file or directory”。这个错误意味着...
在PHP编程语言中,`include`、`include_once`、`require`以及`require_once`是四个非常重要的语句,它们用于将一个或多个文件的内容插入到当前正在执行的脚本中。这些语句主要用于组织代码,重用功能或者引入配置...
- 重复包含检查:如果一个文件已经被 `require_once()` 加载过,那么后续的 `require_once()` 调用不会再次加载该文件。这在处理类库、配置文件等可能被多次引用但只需包含一次的情况下非常有用。 - 错误处理:与 ...
在PHP编程中,`require()`, `include()`, `require_once()`, 和 `include_once()` 是四个非常重要的文件包含函数,它们允许开发者将代码分割到多个文件中,以提高代码的可维护性和重用性。了解它们之间的异同是编写...
主要为大家介绍了WordPress提示require_once() Failed opening required的解决方法,分析了问题的原因与具体的解决技巧,具有一定参考借鉴价值,需要的朋友可以参考下
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...
除了`require_login`,还可以创建其他装饰器来实现更复杂的权限控制,比如`require_admin`,用于检查用户是否为管理员,或者`require_role`,用于检查用户是否拥有特定的角色或权限。这些装饰器可以单独使用,也可以...
include_once和require_once的作用差不多,就是在包含的时候检查被包含的文件是不是已经包含过,如果包含过,那就不执行,否则再包含.我先说这个的原因是因为如果把include,require弄清楚了.那这点就没问题. 现在来说...
本文主要探讨了在函数中使用require_once语句加载配置文件时可能遇到的问题,以及推荐使用静态类来优雅地定义配置文件,从而完美解决这些问题。 首先,当我们在PHP项目中配置文件使用数组来存储配置项时,比如level...
相信大家在使用PHP时经常看到include a.php、include_once a.php、require a.php或者require_once a.php类似这样的写法吧? 我们一起来学习和总结一下这几个语句的作用及特点! include 使用方法: include "test...
例如,我们可以定义一个装饰器`require_login`来检查用户是否已登录,另一个装饰器`require_admin`来判断用户是否有管理员权限。这两个装饰器可以叠加使用,以确保只有登录且具备管理员权限的用户才能执行特定的操作...