0

我一直在我的應用程序中使用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

回答

1
var d = new Date(1367922592459); 

你去那裏,簡單和容易。

(由於JavaScript的處理以毫秒爲單位的日期,也沒有必要做/1000什麼的。)

2
t.setSeconds(secs * -1); 

你有意乘以-1?我不明白爲什麼這可能會工作。

+0

是的,這是故意的。雖然現在我不記得爲什麼 - 真的可以在那裏用代碼註釋完成。另外我也許剛剛完成了一些工作,請參閱我對原始問題的評論。 – Meirion 2013-03-11 00:13:03

0

tldr; 我錯誤地將過期時間戳處理爲秒。以毫秒爲單位處理它們可以解決問題。很明顯,有一個問題toDateTime()

完整版本: 一段時間parse.com已接受無效的FB過期日期。隨着用戶登錄正常,我們不知道有問題。 最近解析改變了一些東西,所以他們錯誤的無效日期,導致我們的登錄中斷。

我們將秒轉換成JS日期對象的函數需要更改爲基於毫秒進行轉換。

新的工作職能:

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