小编Sas*_*ley的帖子

如何使用Facebook PHP SDK 3.0正确处理会话和访问令牌?

在PHP 3.0 SDK中,没有getSession()或任何来自Facebook api外部的会话处理.根据这篇博客文章这个错误报告,几天前facebook的开发者也以某种方式更新了JavaScript sdk .

在过去的几天里,托管的JS SDK引入了一个变化,它破坏了它与当前PHP SDK(2.x和3.x)之间的所有可比性.在其网站上同时使用JS和PHP SDK的开发人员可能会看到服务器端API失败.

但是,我不知道这是否真的会影响我的问题.就像在这个问题的答案中一样,我正在使用PHP检索OAuth对话框的访问令牌,并在会话中保存新的访问令牌.

目前的解决方法

以下代码显示了我如何处理此会话.$_REQUEST['session']是OAuth对话框响应的内容.

if(isset($_REQUEST['session'])) {

    $response = json_decode(stripslashes($_REQUEST['session']), true);

    if(isset($response['access_token'])) {
        $this->api->setAccessToken($response['access_token']);
        $_SESSION['access_token'] = $this->api->getAccessToken();
    }

}
elseif(isset($_SESSION['access_token']) && ! isset($_REQUEST['signed_request'])) 
    $this->api->setAccessToken($_SESSION['access_token']);
elseif(isset($_REQUEST['signed_request'])) {
    Session::invalidate('fbuser');
    $_SESSION['access_token'] = '';
}
Run Code Online (Sandbox Code Playgroud)

以下是我处理用户数据的方法:

try {
    $this->user = Session::getVar('fbuser');
    if ($this->user === false || is_null($this->user)) {
        $facebookUser = $this->api->api('me?fields=id,name,first_name,last_name');
        $this->user = new FBUserModel(array('fbId' => $facebookUser['fbId'], ...));
        Session::setVar('fbuser', $this->user);
    }
}
Run Code Online (Sandbox Code Playgroud)


问题

测试时一切都很好看.仅在发生错误时:第一次设置权限后.现在,由于应用程序在线,似乎每个第二个用户平均发生错误 …

javascript php session facebook

37
推荐指数
2
解决办法
3万
查看次数

流和注释的FQL范围限制

我对Facebook FQL的运作方式感到困惑.我需要获得特定页面的"本月粉丝".这是发表评论最多的用户.

在facebook FQL流文档中,它说:

流表的每个查询都限制在前30天或50个帖子中,以较大者为准,但是您可以使用特定于时间的字段(如created_time)和FQL运算符(例如<或>)来检索更大范围的帖子.

这就是我正在做的事情.我通过以下方式获取某个范围内的帖子:

SELECT actor_id,created_time FROM stream WHERE source_id = '.$wallid.' AND (created_time >= '.$date_start.' OR updated_time >= '.$date_start.')'
Run Code Online (Sandbox Code Playgroud)

这似乎有用 - 不知何故 - 但我的评论有问题.我不想获得特定帖子的所有评论,但是在一个时间范围内的所有评论.

SELECT fromid, time FROM comment WHERE post_id IN (SELECT post_id FROM stream WHERE source_id = '.$wallid.')
Run Code Online (Sandbox Code Playgroud)

这将返回约50条评论.当我添加以下内容时:

AND time > 1309478400 // 2011-07-01
Run Code Online (Sandbox Code Playgroud)

我也得到了评论.但是以下(2011-07-01 - 2011-07-02)我得到一个空数组:

AND time > 1309478400 AND time < 1309564800
Run Code Online (Sandbox Code Playgroud)

当我不添加时间条件时,似乎我可以通过运行带有递增限制的多个查询来返回超过50条注释:

... LIMIT 0, 50
... LIMIT 50, 50
Run Code Online (Sandbox Code Playgroud)

但是这种限制在我的时间条件下无法正常工作.

那么,有没有人已经做过类似的事情,或者任何人可以解释在哪些情况下限制有效,什么时候没有?

php limit facebook-fql

5
推荐指数
1
解决办法
924
查看次数

打字稿:映射类型中的枚举键

我有一个 http 方法的枚举:

export enum HttpMethod {
  GET = 'GET', POST = 'POST', /*...*/
}
Run Code Online (Sandbox Code Playgroud)

然后我定义了一个基本的方法类型,它可以有 anyHttpMethod作为键:

type Methods = {
  [M in HttpMethod]?: any;
};
Run Code Online (Sandbox Code Playgroud)

一个基本的 Route 类型可以使用这个 Method 类型:

type Route<M extends Methods = any> = {
  methods: M;
}
Run Code Online (Sandbox Code Playgroud)

所以我可以定义任何路线,如:

interface AnyRoute extends Route<{
  [HttpMethod.GET]: AnyRequestHandler;
}> {}
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好。现在我想添加一个Validator

type Validator<R extends Route, M extends HttpMethod> = {/*...*/}
Run Code Online (Sandbox Code Playgroud)

并且只希望允许将Methods添加到 中Validator,在 中定义Route

type RouteMethodValidators<R extends Route> = { …
Run Code Online (Sandbox Code Playgroud)

generics enums definition typescript

5
推荐指数
1
解决办法
3816
查看次数