2011-07-27 27 views
3

随着新的Javascript SDK和OAuth 2.0的发布,我想知道是否有可能在不重定向用户的情况下更新SignedRequest(和authtoken),所以我使用了以下方法。基本上,这是一个保持活力的方法,用于我的应用程序绕过令牌的2小时到期时间窗口。使用Javascript OAuth 2.0 SDK更新签名请求

我的应用程序包括:

  1. 闪光灯前端+的Javascript
  2. Web服务(ASMX)使用Facebook的C#SDK

要更新签名的请求,我做到以下几点:

  1. 每20秒我FB.getLoginStatus使用getTimeout调用()
  2. 这会返回一个新的signedRequest
  3. 我更新我的ajaxSetup以在每次对我的服务器的调用中包含此参数。

    var signedRequest; 
    function updateSignedRequest(_signedRequest) { 
        signedRequest = _signedRequest; 
        $.ajaxSetup({ data: { "signed_request": signedRequest} }); 
    } 
    (function ensureAuth() { 
        setTimeout(function() { checkAuth(); ensureAuth(); }, 20000); 
    })(); 
    function checkAuth() { 
        FB.getLoginStatus(handleResCallback, true); 
    } 
    function handleResCallback(res) { 
        if (!res.authResponse) { 
         handleNotConnected(); 
        } else { 
         signedRequest = res.authResponse.signedRequest; 
        } 
    } 
    

几个问题:

我相信Facebook的C#SDK着眼于对每个新的请求,而不是饼干的signed_request参数。这会一直如此吗?

另外,你可以看到在这种方法中的任何其他洞?

+0

我认为这是因为SDK是这意味着该Cookie可以与非可变数据工作的Facebook环境中工作[可]这就像一个对象的所有应用程序 的步行和问题目前尚不清楚为什么你不想查看sigend请求 –

回答

0

这可能不是用户的最佳方法。如果他们出于任何原因已经注销或未通过身份验证,您需要通过弹出或重定向他们登录来处理它。这意味着他们会随机时间中断他们的工作 - 而不是等待让他们做一些需要身份验证的事情,然后呈现登录信息等。您也可以订阅auth事件,而不是每20秒检查一次。你可以设置你的handleNotConnected()作为回调,当他们拒绝应用程序或注销时。或者,您可以读取令牌的到期时间,并且只在到期时间过后才续订。