forge.facebook.authorize返回不正确的Facebook令牌到期时间

问题描述:

我一直在我的应用程序中使用forge.facebook.authorize()几个月来获得FB授权令牌。forge.facebook.authorize返回不正确的Facebook令牌到期时间

但是,由于上周的某个时间点,我无法验证它返回的任何令牌,因为过期时间不正确,因此无法注册或登录任何Facebook用户。

我必须明确表示我的代码没有任何更改 - 此FB登录工作正常以前,然后突然停止,并没有自此。部署的应用程序突然停止让用户使用Facebook登录。从forge.facebook.authorize

的回复:

[FORGE] '"successfully authorized with FB", 

{"access_token":"....","access_expires":1367922592459}' 

我再打开到期秒到JS日期对象使用此项功能:

function toDateTime(secs) { 
    var t = new Date(); 
    t.setSeconds(secs * -1); 
    return t; 
} 

toDateTime(1367922592459); 
> Sun Jun 11 -41335 12:22:41 GMT+0100 (BST) 

看到这里全年出一些疯狂,绝对是在Facebook发明之前。

因此,无论如何,那么我的代码会将FB认证数据传递给Parse.com以登录用户,并且Parse.com显然会因无效的到期时间而将其返回。

问题是发生在iOS和Android应用与trigger.io v1.4.29和v1.4.33

注意建:我有一个工作FB在我的网页的javascript登录(http://wewana.com/),其连接到相同的Facebook应用程序和相同的Parse.com应用程序。这个页面没有出现任何问题,所以看起来FB应用程序很好。

+0

一些橡皮鸭调试后,我的工作出来的东西。它看起来像过期日期是毫秒而不是秒。例如:var d2 = new Date(0); D2。调用setUTCSeconds(1000分之1367922592459); >星期二五月07 2013 11:29:52 GMT + 0100(格林尼治标准时间夏令时) – Meirion 2013-03-11 00:16:10

+0

我很困惑:在你的评论中你使用新的日期(0),而不是乘以-1 - 这看起来是正确的,我期待这一点。在你的问题(和你的实时应用程序)中,你使用了新的Date()并乘以-1。我不明白这是如何工作的,无论access_expires是以毫秒为单位还是以毫秒为单位......你确定你没有推出破碎的JS(例如使用重新加载) – 2013-03-11 10:33:38

+0

结果非常多 - toDateTime( )功能被破坏,但Parse.com接受无效的失效日期 - 所以我们登录的用户,我们从来没有看到toDateTime()的问题。解析修正了他们的错误,然后这个问题变得明显。今天早上给你发了一封邮件,你知道了吗?也许我现在在你的垃圾邮件列表中;) – Meirion 2013-03-11 14:45:52

var d = new Date(1367922592459); 

你去那里,简单和容易。

(由于JavaScript的处理以毫秒为单位的日期,也没有必要做/1000什么的。)

t.setSeconds(secs * -1); 

你有意乘以-1?我不明白为什么这可能会工作。

+0

是的,这是故意的。虽然现在我不记得为什么 - 真的可以在那里用代码注释完成。另外我也许刚刚完成了一些工作,请参阅我对原始问题的评论。 – Meirion 2013-03-11 00:13:03

tldr; 我错误地将过期时间戳处理为秒。以毫秒为单位处理它们可以解决问题。很明显,有一个问题toDateTime()

完整版本: 一段时间parse.com已接受无效的FB过期日期。随着用户登录正常,我们不知道有问题。 最近解析改变了一些东西,所以他们错误的无效日期,导致我们的登录中断。

我们将秒转换成JS日期对象的函数需要更改为基于毫秒进行转换。

新的工作职能:

function toDateTime(secs) { 
    var t = new Date(0); 
    t.setUTCSeconds(secs/1000); 
    return t; 
}