0

所以我正在围绕 facebook oauth 构建我的应用程序,并希望使用 fbsr_ 令牌来识别登录用户(以便 facebook-js 的内容与我的网站保持同步)。

不幸的是,这些 fbsr_* cookie 似乎设置为在一天内过期。这意味着如果用户在一天后访问我的网站,他们没有 cookie 并且显示为注销体验。

然后 facebook-js 运行,识别它们,创建 fbsr_* cookie,并给我一个回调。我可以选择进行硬页面刷新(相当不和谐),或者尝试进行花哨的就地 ajax 更新(大量复杂的代码,仍然有点不和谐)。这些 cookie 没有更长的过期时间,因此用户保持无缝登录是否有原因?大多数网站都允许您在登录时“记住我”以避免 cookie 不断过期,所以我宁愿不要让我的启用 facebook 的网站一直让我退出。

对此我能做些什么吗?我怀疑我可能会切换到我自己管理身份和 cookie 过期的服务器端 oauth(是吗?)。但是 clientside-oauth 会有这样的限制似乎很奇怪,所以我希望我错过了一些东西。

4

1 回答 1

1

对此我能做些什么吗?

不,不是。

确定用户当前是否登录 Facebook 的唯一方法是查看为域 facebook.com 设置的 cookie。

JS SDK 能够做到这一点,因为它在客户端运行,并且可以发出跨域请求以检查这些 cookie 是否已设置。

但是没有办法从您的域中检查这些 cookie 服务器端 - 您的服务器只能访问为您自己的域设置的 cookie。

我怀疑我可能会切换到我自己管理身份和 cookie 过期的服务器端 oauth(是吗?)

如果您在自己的域上设置了自己的 cookie,那么您就是在实施自己的登录系统。

即使你“伪造”了 JS SDK 在你的域下设置的 cookie,也不会带来相同的结果。

您的域中可能有一个 cookie,上面写着“是的,用户 XYZ 已登录 Facebook”——但不一定是这种情况。我本可以在此期间退出 Facebook,而您的 cookie 根本不会反映这一点。因此,无论您接下来尝试做什么,例如 fe 从您的应用中代表我发布某些内容,很可能会失败,因为您只认为我仍然登录到 Facebook,但实际上您没有有效的访问令牌我不再是我了,因为我并没有真正登录到 Facebook。

然后 facebook-js 运行,识别它们,创建 fbsr_* cookie,并给我一个回调。我可以选择进行硬页面刷新(相当不和谐),或者尝试进行花哨的就地 ajax 更新(大量复杂的代码,仍然有点不和谐)。

这些是您唯一可行的选择。

于 2012-10-05T08:25:41.170 回答